FastAPI SqlAlchemy MySql表迁移
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/%7B%7Bcookiecutter.project_slug%7D%7D/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
生成迁移脚本。
alembic revision --autogenerate -m "init commit" # 注意修改了orm之后,修改-m后迁移脚本提示
会通过迁移脚本生成表
alembic upgrade head
总结
最基础orm迁移成数据表,功能就完成了,更多细节自定义的功能,可以自行查看官方文档。
代码GitHub地址
自己改的FastAPI项目生成器 https://github.com/CoderCharm/fastapi-mysql-generator
GitHub地址 https://github.com/CoderCharm/FastAdmin/blob/v1_init/backend/alembic/env.py