一. 介绍
SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
# 安装 pip3 install sqlalchemy
组成部分:
- Engine,框架的引擎
- Connection Pooling ,数据库连接池
- Dialect,选择连接数据库的DB API种类(即选择是用pymysql还是mysqldb)
- Schema/Types,架构和类型
- SQL Exprression Language,SQL表达式语言
SQLAlchemy本身无法操作数据库,其必须以pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:
下面这些链接是字符串:在Dialect里
MySQL-Python mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> pymysql mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] MySQL-Connector mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname> cx_Oracle oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...] 更多:http://docs.sqlalchemy.org/en/latest/dialects/index.html
要使用这些,必须先安装对应的 mysqldb、pymysql、mysqlconnector、 cx_oracle
二.基本使用(一般不按照该示例怎么写,只为了说明)
1. 连接池
示例1:连接池始终只有一个链接
import time import threading import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.engine.base import Engine engine = create_engine( # 用pymysql链接mysql; # root:123 用户名:密码 # 127.0.0.1:3006 数据库ip及端口 # t1:数据库名 # charset=utf8:编码 "mysql+pymysql://root:123@127.0.0.1:3306/t1?charset=utf8", max_overflow=2, # 超过连接池大小外最多创建的连接(即5个已经不够用了,最多再能创建2个,也就是总共最多创建7个链接池) pool_size=5, # 连接池大小,最多5个 pool_timeout=30, # 池中没有线程最多等待的时间(秒),否则报错 pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置) ) conn = engine.raw_connection() # 去链接池拿一个链接 cursor = conn.cursor() # 在链接里拿个cursor,这里其实已经执行了pymysql里的功能了 # 执行sql语句 cursor.execute( "select * from t1" ) result = cursor.fetchall() cursor.close() conn.close()