【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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM