SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
pip3 install sqlalchemy
组成部分:
Engine,框架的引擎
Connection Pooling ,数据库连接池
Dialect,选择连接数据库的DB API种类
Schema/Types,架构和类型
SQL Exprression Language,SQL表达式语言
SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:
MySQL-Python
mysql+mysqldb://:@[:]/
pymysql
mysql+pymysql://:@/[?]
MySQL-Connector
mysql+mysqlconnector://:@[:]/
cx_Oracle
oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
更多:http://docs.sqlalchemy.org/en/latest/dialects/index.html
1. 执行原生SQL语句
1 importtime2 importthreading3 importsqlalchemy4 from sqlalchemy importcreate_engine5 from sqlalchemy.engine.base importEngine6
7 engine =create_engine(8 "mysql+pymysql://root:[email protected]:3306/t1?charset=utf8",9 max_overflow=0, #超过连接池大小外最多创建的连接
10 pool_size=5, #连接池大小
11 pool_timeout=30, #池中没有线程最多等待的时间,否则报错
12 pool_recycle=-1 #多久之后对线程池中的线程进行一次连接的回收(重置)
13 )14
15
16 deftask(arg):17 conn =engine.raw_connection()18 cursor =conn.cursor()19 cursor.execute(20 "select * from t1"
21 )22 result =cursor.fetchall()23 cursor.close()24 conn.close()25
26
27 for i in range(20):28 t = threading.Thread(target=task, args=(i,))29 t.start()
方法1
1 #!/usr/bin/env python
2 #-*- coding:utf-8 -*-
3 importtime4 importthreading5 importsqlalchemy6 from sqlalchemy importcreate_engine7 from sqlalchemy.engine.base importEngine8
9 engine = create_engine("mysql+pymysql://root:[email protected]:3306/t1", max_overflow=0, pool_size=5)10
11
12 deftask(arg):13 conn =engine.contextual_connect()14 with conn:15 cur =conn.execute(16 "select * from t1"
17 )18 result =cur.fetchall()19 print(result)20
21
22 for i in range(20):23 t = threading.Thread(target=task, args=(i,))24 t.start()
方法2
1 #!/usr/bin/env python
2 #-*- coding:utf-8 -*-
3 importtime4 importthreading5 importsqlalchemy6 from sqlalchemy importcreate_engine7 from sqlalchemy.engine.base importEngine8 from sqlalchemy.engine.result importResultProxy9 engine = create_engine("mysql+pymysql://root:[email protected]:3306/t1", max_overflow=0, pool_size=5)10
11
12 deftask(arg):13 cur = engine.execute("select * from t1")14 result =cur.fetchall()15 cur.close()16 print(result)17
18
19 for i in range(20):20 t &