【问题标题】:how to create auto-generated file from last revision in Alembic如何在 Alembic 中从最新版本创建自动生成的文件
【发布时间】:2015-05-07 15:23:37
【问题描述】:

我正在关注this 教程.. initial 自动生成非常完美.. 它基本上使用升级和降级方法创建迁移文件。

假设这是迁移文件的修订号:3e96cf22770b.. 我所有的升级语句如下所示:

def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.create_table('hashtag',
                    sa.Column('id', sa.VARCHAR(), autoincrement=False, nullable=False),
                    sa.Column('text', sa.VARCHAR(), autoincrement=False, nullable=True),
                    sa.PrimaryKeyConstraint('id', name=u'hashtag_pkey')
                    )

我的降级声明如下所示:

def downgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.drop_table('user_access_token')

现在我对我的 models.py 文件做了一个简单的修改,这就是它在 git 上的样子:

-    verificationCode = Column(String())
+    isVerified = Column(Boolean())

问题是,我不知道如何运行实际上只是给我一个 delta 迁移文件的自动生成语句.. 即我只想要一个用另一列替换一列的迁移文件..

我尝试将当前版本设置为 3e96cf22770b 然后运行

python migrate.py db revision --autogenerate

但随后它会继续创建初始迁移文件的副本(即迁移整个数据库架构),而不仅仅是 delta.. 想法?

【问题讨论】:

  • 您确定支持更改列类型吗?

标签: python flask flask-sqlalchemy alembic sqlalchemy-migrate


【解决方案1】:

Alembic 通过观察当前数据库架构(它实际上连接数据库并获取架构)和新模型(在您的 Python 代码中)自动生成迁移脚本(使用 --autogenerate 标志)。因此,当您要创建新的迁移脚本时,请确保您的数据库处于以前的架构(在您的情况下为 3e96cf22770b)。

不确定您是如何尝试设置当前架构的,但您可以检查数据库中 alembic_version 表中的架构。

【讨论】:

    【解决方案2】:

    你应该可以跑了:

    python migrate.py db migrate
    

    这应该会为您创建一个新的迁移文件。一旦你得到它,你就可以运行:

    python migrate.py db upgrade 
    

    这将升级您的数据库。 在升级数据库之前,请查看迁移文件,看看它是否在做你想做的事情。

    【讨论】:

    • 这根本不是我的问题
    • 从您链接到的文档中,它说 migrate.py db revision --autogenerate 创建了一个空的迁移脚本。从您的问题来看,您似乎想删除 verifyCode 列并将 isVerified 列添加到数据库表/模式中,我错了吗?
    猜你喜欢
    • 2020-11-05
    • 2020-11-17
    • 2023-03-11
    • 2012-09-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2021-07-14
    相关资源
    最近更新 更多