【SQLAlchemy】ORM 關系映射框架了解與初步使用
1. 認識SQLAlchemy
SQLAlchemy是Python SQL工具包和對象關系映射器。它專為高校和高性能的數(shù)據(jù)庫訪問而設計。它支持連接SQLite、PostgreSQL、Oracle、MySQL/MariaDB、Microsoft SQL Server等等。
它提供了兩種主要的使用模式:
SQLAlchemy Core,通過Table構造函數(shù)初始化Table對象。
ORM,通過定義一個類,繼承declarative_base這個特殊基類(SQLAlchemy 2.0j繼承的是DeclarativeBase,注意看官方文檔),declarative_base會把元數(shù)據(jù)容器(類)和映射器(數(shù)據(jù)表)結(jié)合在一起。
目前官方SQLAlchemy最新版本為2.0.0。
無論使用哪種方式,都需要連接到數(shù)據(jù)庫。需要創(chuàng)建一個SQLAlchemy引擎,創(chuàng)建引擎如下:
2.?使用ORM
以下例子使用SQLAlchemy 1.4.32實驗,其他版本參考官方文檔。
orm使用的類應該滿足如下要求:
繼承自declarative_base對象
包含__tablename__,數(shù)據(jù)庫表名稱
包含一個或多個屬性,它們都是Column對象
確保一個或多個屬性組成主鍵
2.1 聲明模塊
每個表都被定義為一個模塊,在項目中只需要聲明一次,它包含了數(shù)據(jù)庫表的信息,比如表名稱、列名稱、列屬性等元數(shù)據(jù)。
relationship()表示在兩個ORM類之間進行聯(lián)動,比如User的addresses屬性關聯(lián)到Address,Address的user屬性關聯(lián)到User,更深層的用法待補充。
2.2 創(chuàng)建引擎
引擎能為我們創(chuàng)建新的數(shù)據(jù)庫連接,它是維持在連接池里的,方便復用。
echo=True,會將表創(chuàng)建語句記錄在標準輸出里。程序會自動創(chuàng)建test.sqlite數(shù)據(jù)庫文件。
運行日志如下:

2.3 插入數(shù)據(jù)
創(chuàng)建的模塊實例如果要持久化到數(shù)據(jù)庫中,需要調(diào)用會話Session,Session會和數(shù)據(jù)庫進行交互,它封裝了一個事務,這個事務將一直保持打開狀態(tài),直到會話提交或回滾??聪路嚼樱?/p>
session.add_all可以一次性添加多個對象實例。
session.add一次添加一個實例。
從日志看就是提交了一個事務,從數(shù)據(jù)庫表里看用戶表和地址表數(shù)據(jù)都插入成功了,

2.4 查詢數(shù)據(jù)
2.4.1 單表查詢
查詢數(shù)據(jù)使用到sqlalchemy的select方法,where中指明條件,session.scalars會返回一個可迭代對象ScalarResult。
下方為查詢語句和查詢結(jié)果:

2.4.2 多表查詢
查詢xiaoliu的地址信息
查詢結(jié)果:

2.5 更新數(shù)據(jù)
例子:
把xiaowu的全名修改為Zhang Xiaowu Hahaha,地址追加"xiaowu@ll.com"
運行結(jié)果:

2.6 刪除數(shù)據(jù)
例子:刪除xiaowu的賬號和地址信息
運行結(jié)果:xiaowu的賬號信息和地址信息均刪除。

3. 參考資料
SQLAlchemy官方文檔:https://www.sqlalchemy.org/
Python庫之SQLAlchemy:?https://zhuanlan.zhihu.com/p/265224273