gpt4 book ai didi

postgresql - Alembic 未生成正确的更改

转载 作者:行者123 更新时间:2023-11-29 12:36:11 30 4
gpt4 key购买 nike

我正在使用 Flask-Migrate==2.0.0。它没有正确检测到变化。每次我运行 python manage db migrate 它都会为所有模型生成一个脚本,尽管它们已在以前的修订版中成功添加。我在表中添加了两个新列,迁移修订本应该只有这两个新列,而不是所有表都添加到其中。有什么我想念的吗?

编辑 1

这是正在发生的事情。我将 Flask_Migrate 添加到我的项目中。

python manage db init
python manage db migrate
python manage db upgrade

Flask-Migrate 为模型生成的表加上具有修订版的 alembic_version 表

985efbf37786

之后我做了一些修改。我在我的一个表中添加了两个新列并再次运行命令

python manage db migrate

它产生了新的修订

934ba2ddbd44

但不是只添加这两个新列,修订包含所有表的脚本以及这两个新列。所以例如在我的第一次修订中,我有这样的东西

op.create_table('forex_costs',
sa.Column('code', sa.String(), nullable=False),
sa.Column('country', sa.String(), nullable=False),
sa.Column('rate', sa.Numeric(), nullable=False),
sa.PrimaryKeyConstraint('code', 'country', name='forex_costs_id'),
schema='regis'
)

第二次修订也包含完全相同的代码。我不明白为什么它已经生成了。

我用谷歌搜索了一下,我的问题看起来完全像这样https://github.com/miguelgrinberg/Flask-Migrate/issues/93但我没有使用 oracle 数据库。我正在使用 PostgreSQL。我也不知道它是否有任何影响,但我没有在默认公共(public)架构中创建表,而是创建了两个新架构(schema_a 和 schema_b),因为我有很多表(大约 100 个)。所以只是为了安排他们。

编辑 2

第一个问题似乎通过添加解决了

include_schemas=True

在 env.py 中。

现在新的迁移不再试图再次创建已经存在的表,但是它在外键方面存在一些问题。每次我创建一个新的修订版时,它都会尝试删除已经存在的外键,然后尝试添加它们。日志看起来像这样

INFO  [alembic.autogenerate.compare] Detected removed foreign key (post_id)(post_id) on table album_photos
INFO [alembic.autogenerate.compare] Detected removed foreign key (album_id)(album_id) on table album_photos
INFO [alembic.autogenerate.compare] Detected removed foreign key (user_id)(user_id) on table album_photos
INFO [alembic.autogenerate.compare] Detected added foreign key (album_id)(album_id) on table prodcat.album_photos
INFO [alembic.autogenerate.compare] Detected added foreign key (post_id)(post_id) on table prodcat.album_photos
INFO [alembic.autogenerate.compare] Detected added foreign key (user_id)(user_id) on table prodcat.album_photos

我已经尝试为每个外键约束添加名称,但这没有任何效果。

最佳答案

感谢您在解决问题后回来提供反馈。我在使用 postgres

时遇到了同样的问题 2 个小时

顺便说一句,我想指出您必须在 block context.configure 中包含 include_schemas 选项,如下所示:

context.configure(connection=connection,
target_metadata=target_metadata,
include_schemas=True,
process_revision_directives=process_revision_directives,
**current_app.extensions['migrate'].configure_args)

关于postgresql - Alembic 未生成正确的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41150956/

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