1. 认识SQLAlchemy
SQLAlchemy是Python SQL工具包和对象关系映射器。它专为高校和高性能的数据库访问而设计。它支持连接SQLite、PostgreSQL、Oracle、MySQL/MariaDB、Microsoft SQL Server等等。
【资料图】
它提供了两种主要的使用模式:
SQLAlchemy Core,通过Table构造函数初始化Table对象。
ORM,通过定义一个类,继承declarative_base这个特殊基类(SQLAlchemy 2.0j继承的是DeclarativeBase,注意看官方文档),declarative_base会把元数据容器(类)和映射器(数据表)结合在一起。
目前官方SQLAlchemy最新版本为2.0.0。
无论使用哪种方式,都需要连接到数据库。需要创建一个SQLAlchemy引擎,创建引擎如下:
2. 使用ORM
以下例子使用SQLAlchemy 1.4.32实验,其他版本参考官方文档。
orm使用的类应该满足如下要求:
继承自declarative_base对象
包含__tablename__,数据库表名称
包含一个或多个属性,它们都是Column对象
确保一个或多个属性组成主键
2.1 声明模块
每个表都被定义为一个模块,在项目中只需要声明一次,它包含了数据库表的信息,比如表名称、列名称、列属性等元数据。
relationship()表示在两个ORM类之间进行联动,比如User的addresses属性关联到Address,Address的user属性关联到User,更深层的用法待补充。
2.2 创建引擎
引擎能为我们创建新的数据库连接,它是维持在连接池里的,方便复用。
echo=True,会将表创建语句记录在标准输出里。程序会自动创建test.sqlite数据库文件。
运行日志如下:
2.3 插入数据
创建的模块实例如果要持久化到数据库中,需要调用会话Session,Session会和数据库进行交互,它封装了一个事务,这个事务将一直保持打开状态,直到会话提交或回滚。看下方例子:
session.add_all可以一次性添加多个对象实例。
session.add一次添加一个实例。
从日志看就是提交了一个事务,从数据库表里看用户表和地址表数据都插入成功了,
2.4 查询数据
2.4.1 单表查询
查询数据使用到sqlalchemy的select方法,where中指明条件,session.scalars会返回一个可迭代对象ScalarResult。
下方为查询语句和查询结果:
2.4.2 多表查询
查询xiaoliu的地址信息
查询结果:
2.5 更新数据
例子:
把xiaowu的全名修改为Zhang Xiaowu Hahaha,地址追加"xiaowu@ll.com"
运行结果:
2.6 删除数据
例子:删除xiaowu的账号和地址信息
运行结果:xiaowu的账号信息和地址信息均删除。
3. 参考资料
SQLAlchemy官方文档:https://www.sqlalchemy.org/
Python库之SQLAlchemy: https://zhuanlan.zhihu.com/p/265224273