gpt4 book ai didi

python - 如果未检测到任何更改,如何防止 alembic revision --autogenerate 制作修订文件?

转载 作者:行者123 更新时间:2023-12-05 01:26:34 26 4
gpt4 key购买 nike

我有一个项目,我在其中使用 SQLAlchemy 作为模型,并且我正在尝试集成 Alembic 来进行迁移。当我更改模型并且 Alembic 看到模型已更改时,一切都按预期工作 -> 它使用命令创建良好的迁移文件:alembic revision --autogenerate -m "model changed"

但是当我没有改变模型中的任何东西并且我使用相同的命令时:

alembic revision --autogenerate -m "should be no migration"

revision 给我这样的“空”修订文件:

"""next

Revision ID: d06d2a8fed5d
Revises: 4461d5328f57
Create Date: 2021-12-02 18:09:42.208607

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = 'd06d2a8fed5d'
down_revision = '4461d5328f57'
branch_labels = None
depends_on = None


def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
pass
# ### end Alembic commands ###


def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
pass
# ### end Alembic commands ###

这个文件的用途是什么?当 alembic revision --autogenerate 看不到任何更改时,我可以阻止创建这个“空文件”吗?比较我使用 Django 时和输入命令时它的内部迁移:

python manage.py makemigrations

我得到的输出是这样的:

未检测到变化

并且没有创建迁移文件。有没有办法对 Alembic 修订做同样的事情?或者是否有其他命令可以检查模型是否有变化,如果有,我可以简单地运行 alembic 修订和升级?

最佳答案

接受的答案没有回答问题。正确答案是:是的,您可以调用 alembic revision --autogenerate 并确保只有在发生更改时才会生成修订文件:

根据蒸馏器的 documentation

在 Flask-Migrate 中实现(恰好在 this 文件中),它只是对 env.py 的更改以说明所需的功能,即如果模型没有更改则不会自动生成修订。

您仍然会运行 alembic revision --autogenerate -m "should be no migration" 但简而言之,您对 env.py 所做的更改是:

    def run_migrations_online():
# almost identical to Flask-Migrate (Thanks miguel!)
# this callback is used to prevent an auto-migration from being generated
# when there are no changes to the schema

def process_revision_directives(context, revision, directives):
if config.cmd_opts.autogenerate:
script = directives[0]
if script.upgrade_ops.is_empty():
directives[:] = []
print('No changes in schema detected.')

connectable = engine_from_config(
config.get_section(config.config_ini_section),
prefix="sqlalchemy.",
poolclass=pool.NullPool,
)

with connectable.connect() as connection:
context.configure(
connection=connection,
target_metadata=target_metadata,
process_revision_directives=process_revision_directives
)

with context.begin_transaction():
context.run_migrations()

现在,您可以轻松调用 alembic revision --autogenerate,而无需冒创建新的空修订版的风险。

关于python - 如果未检测到任何更改,如何防止 alembic revision --autogenerate 制作修订文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70203927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com