sqlalchemy-alembic
問題:在學習fastapi的過程中想通過sqlalchemy來連接數據庫,對model層進行操作,並且進行類似於django的migrate的操作,但是發現fastapi並沒有自帶的方便的數據庫遷移插件,所以從sqlalchemy入手,找到了alembic,親測有效
1.什么是alembic
Alembic 使用 SQLAlchemy 作為底層引擎,為關系數據庫提供變更管理腳本的創建、管理和調用。本教程將全面介紹該工具的理論和用法。
首先,確保按照安裝中的說明安裝Alembic 。如鏈接文檔中所述,通常最好將 Alembic 安裝在與目標項目相同的模塊/Python 路徑中,通常使用Python 虛擬環境,以便在alembic
運行命令時,調用的 Python 腳本by alembic
,即您的項目env.py
腳本,將可以訪問您的應用程序模型。這並非在所有情況下都嚴格必要,但在絕大多數情況下通常是首選。
下面的教程假設alembic
命令行實用程序存在於本地路徑中,並且在調用時將可以訪問與目標項目相同的 Python 模塊環境。
官網鏈接:https://alembic.sqlalchemy.org/en/latest/tutorial.html#
2.如何使用?
2.1 下載安裝
pip install alembic
2.2 使用
cd /path/to/yourproject # 進入自己項目的跟目錄
source /path/to/yourproject/.venv/bin/activate # 激活虛擬環境
alembic init alembic # 在項目中生一個alembic的插件環境
# 查看alembic結構
├── alembic # 二級目錄
│ ├── README # readme
│ ├── env.py # 環境配置
│ ├── script.py.mako
│ └── versions # 版本
├── alembic.ini # 配置文件
......
-
具體的配置我們在此部過多贅述,詳細參見文檔:https://alembic.sqlalchemy.org/en/latest/tutorial.html#
-
在開發過程中我們主要會修改的文件是
env.py
和alembic.ini
# alembic.ini # 在alembic.ini中我們主要修改sqlalchemy.url這個配置,目的就是讓alembic知道我們使用的sql數據庫具體信息,這個寫法和sqlalchemy一樣 sqlalchemy.url = mysql+pymysql://root:root@127.0.0.1:3306/mydb001
# env.py # 在默認的env.py配置文件中target_metadata是為None的,這個配置的作用是指定我們的model 它可以指定一個,也可以通過數組指定多個,建議使用多個 # target_metadata = None # 默認配置 from api.orders.model import Base as orders_base from api.users.model import Base as users_base target_metadata = [orders_base.metadata, users_base.metadata]
-
到此,配置就修改成功了,可以進行遷移
# 遷移表 alembic revision -m "create account table" # 修改表結構 alembic revision --autogenerate -m "change pwd" # --autogenerate參數可以對字段做增刪改 # -m 添加注釋 # 通過該命令可以將模型遷移到數據庫 alembic upgrade head
3.demo
- model示例:
- 遷移后的數據庫示例:
