安装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:123456@47.xx.xx.231:23306/test
构建元数据(models.py)
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
DB_URI = "mysql+pymysql://root:123456@47.xx.xx.231: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