【FastAPI 學習三】 FastAPI SqlAlchemy MySql表遷移
FastAPI SqlAlchemy MySql表遷移
本系列部落格是配合Vue開發一套後臺管理系統,對應的Vue教程見個人部落格
https://www.charmcode.cn/
FastAPI專案官網是直接使用的SqlAlchemy ORM,不像Flask,一般使用Flask-SqlAlchemy擴充套件,習慣了flask擴充套件的,沒使用 SqlAlchemy,
雖然大體上很像,但是有些地方還是不一樣的。
SqlAlchemy官方本身就是使用alembic實現表遷移的,所以現在直接用這個。
官網 https://alembic.sqlalchemy.org/en/latest/
alembic 初始化
先安裝alembic
pip install alembic
然後生成初始化檔案, 在專案外一層使用以下初始化命令
alembic init alembic
就會建立一個名為alembic的檔案和一個alembic.ini檔案
如下所示
alembic/ |____version/ // 一個空的資料夾,儲存遷移中間檔案 |____env.py // 遷移配置檔案 (主要設定檔案) |____script.py.mako |____READEME // 配置檔案 alembic.ini // alembic 自動生成的遷移配置檔案 app/ // 專案資料夾
配置alembic/env.py
檔案
如我這個專案,先倒入路徑在匯入,orm model
import os import sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # print(f"當前路徑:{BASE_DIR}") # /Users/xxxx/python_code/FastAdmin/backend sys.path.insert(0, BASE_DIR) from app.api.db.base import Base # noqa target_metadata = Base.metadata
配置sqlalchemy.url
連結地址
遷移orm model也是需要連結的, 我是先參考FastAPI官方全棧專案生成模版的方式匯入
full-stack-fastapi-postgresql Github地址
https://github.com/tiangolo/full-stack-fastapi-postgresql/blob/master/{{cookiecutter.project_slug}}/backend/app/alembic/env.py
def get_url():
from app.core.config import settings
return settings.SQLALCHEMY_DATABASE_URL
遷移命令(兩步)
先把model 轉換成遷移指令碼,就會在alembic/version/xxxxxxxx_init_commit.py
生成遷移指令碼。(修改model檔案後第二次遷移,記得修改-m後面的備註資訊)
alembic revision --autogenerate -m "init commit" # 注意修改了orm之後,修改-m後遷移指令碼提示
會通過遷移指令碼生成表
alembic upgrade head
總結
最基礎orm遷移成資料表,功能就完成了,更多細節自定義的功能,可以自行檢視官方文件。
程式碼GitHub地址
https://github.com/CoderCharm/fastapi-mysql-generator
見個人部落格 https://www.charmcode.cn/article/2020-07-12_FastAPI_SqlAlchemy_mysql_alembic