文章
alembic 使用教程
1、安装
pip install alembic
pip install asyncmy
pip install cryptography2、迁移
2.1 创建迁移仓库
alembic的使用类似git,也可以进行版本回退,并且都需要创建好一个迁移仓库,在项目根目录下使用一下命令生成仓库
alembic init alembic --template async如果项目MYSQL驱动不是一步的,比如pymysql那么就不需要执行 --template async
2.2 修改alembic.ini
要将模型迁移到数仓中还需要修改alembic.ini下连接数据库的配置,修改代码如下:
sqlalchemy.url = mysql+asyncmy://xxx:xxx@xxx:3306/xxx?charset=utf8mb42.3 修改env.py
将alembic/env.py文件中的target_metadata修改为如下:
from models imprt Base
target_metadata = Base.metadata这里models代码如下
models/__init__.py
from sqlalchemy import create_engine
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
SQL_DATABASE_URL = "mysql+asyncmy://datacenter:tYwTwDtjLtBRSKYk@49.232.247.243:3306/datacenter?charset=utf8mb4"
engine = create_async_engine(
SQL_DATABASE_URL,
# 将输出所有执行SQL的日志(默认是关闭的)
echo=True,
# 连接池大小(默认是5个)
pool_size=10,
# 允许连接池最大的连接数(默认是10个)
max_overflow=20,
# 获得连接超时时间(默认30秒)
pool_timeout=10,
# 连接回收时间(默认是-1, 代表永不回收)
pool_recycle=3600,
# 连接前是否预检查(默认为Faslse)
pool_pre_ping=True
)
AsyncSessionFactory = sessionmaker(
# Engine或者其子类对象(这里是AsyncEngine)
bind=engine,
# Session类的代替(默认是Session类)
class_=AsyncSession,
# 是否在查找之前执行flush操作(默认是True)
autoflush=True,
# 是否执行commit操作后Session就过期(默认是True)
expire_on_commit=False
)
Base = declarative_base()
# 导入其他模型的python文件
from . import users, articles, settingsmodels/users.py 代码如下:
from sqlalchemy import Column, Integer, String, ForeignKey, Table, DateTime, Boolean
from models import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
username = Column(String(50), unique=True, index=True)
password = Column(String(255))2.4 生成迁移脚本
如果模型发生改变了,那么需要先将模型生成迁移脚本,执行一下命令:
alembic revision --autogenerate -m "修改的内容注释"这样就会在alembic/versions下生成迁移脚本。
2.5 执行迁移脚本
在alembic/versions下生成迁移脚本后,模型的修改并没有同步到数据库中,因此还需要执行以下命令:
alembic upgrade head如果想要回到上岗一次的版本,那么可以使用一下命令来实现:
alembic downgrade