SQLAlchemy + alembic版本迁移数据库

安装alembic,sqlalchemy,pymysql

pip install alembic
pip install pymysql
pip install sqlalchemy

在项目根目录下执行命令:alembic init alembic

生成文件:
alembic
├── README
├── env.py
├── script.py.mako
└── versions
alembic.ini

  • alembic 目录:迁移脚本的根目录,放置在应用程序的根目录下,可以设置为任意名称。在多数据库应用程序可以为每个数据库单独设置一个 Alembic 脚本目录。
  • README 文件:说明文件,初始化完成时没有什么意义。
  • env.py文件:一个 python 文件,在调用 Alembic 命令时该脚本文件运行。
  • script.py.mako 文件:是一个 mako 模板文件,用于生成新的迁移脚本文件。
  • versions 目录:用于存放各个版本的迁移脚本。初始情况下为空目录,通过 revision 命令可以生成新的迁移脚本。
  • alembic.ini文件: 配置文件。
  • models.py: 自建表文件。

修改配置文件

在 alembic.ini 中设置数据库连接

sqlalchemy.url = mysql+pymysql://root:[email protected]:23306/test

构建元数据(models.py)

from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base

DB_URI = "mysql+pymysql://root:[email protected]:23306/test"

engine = create_engine(DB_URI)

Base = declarative_base(engine)
# BaseModel.metadata.reflect(engine)  # 读取表信息

class User(BaseModel):
    __tablename__ = "users"  # 表名

    id = Column(Integer, primary_key=True)
    name = Column(String(45))

# BaseModel.metadata.create_all(engine)
# Session = sessionmaker(bind=engine)

BaseModel.metadata.create_all(engine)多个表同时创建
Session的主要目的是建立与数据库的会话,它维护你加载和关联的所有数据库对象。它是数据库查询(Query)的一个入口。在Sqlalchemy中,数据库的查询操作是通过Query对象来实现的。而Session提供了创建Query对象的接口

修改target_metadata

在 env.py 中设置,将target_metadata赋值成数据库的元数据(metadata)
如果执行 revision 有 import 报错,注意是否正确将当前项目目录添加到 sys.path 路径

import sys                                             
from os.path import abspath, dirname                   
sys.path.append(dirname(dirname(abspath(__file__))))   

from modules import Base                        
target_metadata = Base.metadata

基于数据库 model 定义进行更新

将 model 定义好,并确认在 env.py 里导入的 Base 类是在 model 定义的地方的
配置完成执行( -m “注释信息”,根据情况更改,会用到生成的py文件名字里)
alembic revision --autogenerate -m “create_user_table"
这里可以看到虚拟机目录在 alembic/versions 里生成了 py 文件,检查确认更新的内容,然后执行
alembic upgrade head
以后如果修改了模型,重复以上两个步骤。

常用alembic命令和参数解释:
init:创建一个alembic仓库。
revision:创建一个新的版本文件。
--autogenerate:自动将当前模型的修改,生成迁移脚本。
-m:本次迁移做了哪些修改,用户可以指定这个参数,方便回顾。
upgrade:将指定版本的迁移文件映射到数据库中,会执行版本文件中的upgrade函数。如果有多个迁移脚本没有被映射到数据库中,那么会执行多个迁移脚本。
[head]:代表最新的迁移脚本的版本号。
downgrade:会执行指定版本的迁移文件中的downgrade函数。
heads:展示head指向的脚本文件版本号。
history:列出所有的迁移版本及其信息。
current:展示当前数据库中的版本号。
另外,在你第一次执行upgrade的时候,就会在数据库中创建一个名叫alembic_version表,这个表只会有一条数据,记录当前数据库映射的是哪个版本的迁移文件。

其他命令

  • 查看记录和历史:alembic history
  • 回退上一个升级的版本:alembic downgrade -1

你可能感兴趣的:(SQLAlchemy + alembic版本迁移数据库)