Alembic

Alembic介绍Alembic是一个Python库,用于管理数据库迁移。如果你使用SQLAlchemyORM定义了模型,那么你可以使用Alembic来生成数据库表。安装alembic$pipinstallalembic初始化alembic项目$alembicinitalem

大家好,欢迎来到IT知识分享网。Alembic"

介绍

Alembic 是一个 Python 库,用于管理数据库迁移。如果你使用 SQLAlchemy ORM 定义了模型,那么你可以使用 Alembic 来生成数据库表。

安装alembic
$ pip install alembic
初始化alembic项目
$ alembic init alembic
# 会生成一个alembic的文件夹,其中包含一些初始化文件
├── alembic/
│   ├── versions/ # 存储数据库迁移脚本
│   ├── env.py # 包含了alembic的环境配置。这些内容会被alembic在执行迁移时使用。 
│   ├── script.py.mako # 模板文件。它是用来生成数据库迁移脚本的。
├── alembic.ini # alembic项目的配置文件。它用于定义alembic的运行参数和环境变量。
生成迁移脚本
#1. 需要在 alembic.ini 文件中指定数据库的连接地址:
sqlalchemy.url = mysql+pymysql://root:root@127.0.0.1:3306/test?charset=utf8mb4

#2. 使用 alembic revision --autogenerate 命令来生成迁移脚本
$ alembic revision --autogenerate -m "create users table"
执行迁移脚本
$ alembic upgrade head
指定ini配置文件
'''
方便切换不同的环境
'''
# 指定配置信息生成迁移文件
$ alembic --config alembic.ini.dev revision --autogenerate
# 指定配置信息将数据库升级到最新版本
$ alembic --config alembic.ini.dev upgrade
# 指定配置信息将数据库降级到指定的版本
$ alembic --config alembic.ini.dev downgrade
# 指定配置信息查看数据库的当前版本
$ alembic --config alembic.ini.dev current
报错查询
'''
当你使用 alembic revision --autogenerate 命令生成 Alembic 版本文件时,
如果遇到 FAILED: Can't proceed with --autogenerate option; environment script XXX does not provide a MetaData object or sequence of objects to the context.
'''
# 通常是因为你的环境脚本(environment script)没有正确地提供元数据(MetaData)对象。
# env.py
from app.core.database import metadata
target_metadata = metadata

# database.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.core.config import Config

# 创建数据库引擎
engine = create_engine(Config.SQLALCHEMY_DATABASE_URL, pool_pre_ping=True)
session = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# 创建元信息对象
metadata = MetaData(bind=engine)

'''
当你使用 alembic revision --autogenerate 命令生成 Alembic 版本文件时,
如果遇到 AttributeError: 'NoneType' object has no attribute '_instantiate_plugins'
'''
# 是因为create_engine传入的数据库配置是None。
# 如果你使用的是配置文件读取的数据连接配置那你直接改成硬编码的方式试试。如果可以了,那就在检查你为什么读取不到吧。
'''
当你使用 alembic revision --autogenerate 命令生成 Alembic 版本文件时,
如果遇到 迁移文件中没有内容,无法识别到定义的模型类
'''
需要将模型类绑定到元信息对象中
metadata.create_all(engine, checkfirst=True, tables=[User.__table__])

'''
当你使用 alembic revision --autogenerate 命令生成 Alembic 版本文件时,
如果遇到 Target database is not up to date
'''
# 可以尝试使用 Alembic 的 stamp 命令来将迁移历史表的版本标记更新为当前的最新版本
$ alembic stamp head

'''
这样,Alembic 就会将迁移历史表的版本标记更新为最新版本,然后你就可以继续使用 upgrade 命令了。
但是,这种方法只能用于在开发环境中,因为在生产环境中,数据库中的表结构通常是不能被修改的。
另外,你也可以尝试使用 Alembic 的 history 命令查看迁移历史,以及 current 命令查看当前的版本,这样就可以更清晰地了解当前的迁移状态。
'''

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33954.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信