首页 > 技术文章 > 【alembic】-fastapi必备之数据库迁移

gokublog 2021-09-28 14:29 原文

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.pyalembic.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示例:

image-20210629180918844

image-20210629181008232

  • 迁移后的数据库示例:
image-20210629183820603

推荐阅读