简介
SQLAlchemy是Python语言的一款流行的ORM(Object Relational Mapper)框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,即将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
安装SQLAlchemy也很简单,直接使用pip安装即可。
下面重点介绍SQLAlchemy的使用。
版本检查
当前sqlalchemy版本为1.1.9
连接数据库
- engine 是 Engine类的一个对象
- echo=True表明开启logging模块的日志
- 数据库连接:
engine://user:password@host:port/database
,其中engine为mysql+pymysql,或者是mysql+mysqldb,或者是oracle+cx_oracle等等
创建表
- 派生类User会继承基类Base的初始化函数
__init__
,会自动的接受我们所定义的列对应的关键字参数 - 未赋值的列会用None初始化,如上面的id
Session
SQLAlchemy真正处理数据库的部分是Session。
如果已经创建好了一个Engine对象engine,那么可以用以下语句创建一个Session
如果engine为创建好,则可以用以下语句创建
当engine创建好之后,在配置Session即可
当需要和数据库交互的时候,就需要实例化Session
创建完成之后这个session并没有马上获取数据库连接。只有当这个session第一次操作数据库的时候才会从Engine维护的连接池中获取一个连接,并持有这个连接一直到我们提交了所有的改变或者关闭了这个session。
DML
insert
如果这个commit的过程中发生异常,则后续所有的commit都无法执行,因此DML都需要放在try…except中处理,如下
update
和insert类似,都是使用session.add方法,但是update操作的时候需要数据库中存在带操作的记录。
delete
删除之前必须确保数据库中存在要删除的记录。
QUERY
此条语句经ORM转换之后的SQL如下:
query函数的返回结果为一个Query对象,Query对象是可迭代的,支持切片操作。
下面列举常见的filter操作
相等
不相等
模糊匹配like:大小写敏感
模糊匹配ilike:大小写不敏感
IN
NOT IN
IS NULL
IS NOT NULL
AND
OR
下面列举SQL支持的常见的function
Relationship
表和表之间会有外键关系,数据库的外键关系在ORM中的使用方法如下:
数据库维护数据之间的外键关系会消耗数据库资源,影响性能,在大型的应用中一般不使用外键等数据库高级特性,而是由应用框架来维护数据之间的约束。
参考
- 官方文档-Object Relational Tutorial
- A step-by-step SQLAlchemy tutorial
- 廖雪峰-使用SQLAlchemy