fastapi: 用alembic实现数据库迁移
一,安装用到的第三方库,并初始化
$ pip install alembic
初始化,注意指定异步模板:
alembic init -t async alembic
因为我们使用的是异步驱动(aiomysql),初始化时必须指定 async 异步模板:
执行后,项目根目录下会多出 alembic.ini 配置文件和一个 alembic/ 文件夹。
如下:
$ ls
alembic alembic.ini
二,配置alembic
1, 配置数据库url:
找到下面一行:
$ grep url alembic.ini
sqlalchemy.url = driver://user:pass@localhost/dbname
配置为你的数据库地址:
$ grep url alembic.ini
# sqlalchemy.url = driver://user:pass@localhost/dbname
sqlalchemy.url = mysql+aiomysql://root:rootpassword@localhost:3306/media_bank
2,配置basemodel
Alembic 需要通过它来捕获你写好的模型结构。
找到 target_metadata = None 并将其修改,同时确保引入你定义模型的 Base:
from app.models.mybasemodel import MyBaseModel
target_metadata = MyBaseModel.metadata
3, 注意:
models目录下的__init__.py中要导入一下具体的模型文件
三,测试效果:
检测要处理的model类,转换为sql文件
$ alembic revision --autogenerate -m "create user table3"
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.plugins] setting up autogenerate plugin alembic.autogenerate.schemas
INFO [alembic.runtime.plugins] setting up autogenerate plugin alembic.autogenerate.tables
INFO [alembic.runtime.plugins] setting up autogenerate plugin alembic.autogenerate.types
INFO [alembic.runtime.plugins] setting up autogenerate plugin alembic.autogenerate.constraints
INFO [alembic.runtime.plugins] setting up autogenerate plugin alembic.autogenerate.defaults
INFO [alembic.runtime.plugins] setting up autogenerate plugin alembic.autogenerate.comments
INFO [alembic.autogenerate.compare.tables] Detected added table 'products'
INFO [alembic.autogenerate.compare.tables] Detected added table 'users'
Generating /data/python/fastapi/demo1/alembic/versions/5e75b031defe_create_user_table3.py ... done
执行sql,写入到数据表中
$ alembic upgrade head
INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running upgrade 5aba779b0b50 -> 5e75b031defe, create user table3
浙公网安备 33010602011771号