【SQLAlchemy】ORM 关系映射框架了解与初步使用

哔哩哔哩   2023-01-31 12:01:23

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

最新资讯