防止在没有更改架构时生成Alembic自动迁移

问题描述 投票:0回答:1

我正在研究flask应用程序,并通过Flask-Migrate连接器将snowflake-sqlalchemy与雪花数据库一起使用。

我的app / models.py中具有以下模型:

class User(db.Model):
    username = db.Column(db.String(100), primary_key=True)


class UserActions(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user = db.Column(db.String(100), db.ForeignKey('user.username'))

您可以看到,这是一个简单的2表示例,其中一个表具有外键约束。

第一次运行flask db migrate,会得到以下自动生成的迁移:

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('user',
    sa.Column('username', sa.String(length=100), nullable=False),
    sa.PrimaryKeyConstraint('username', name=op.f('pk_user'))
    )
    op.create_table('user_actions',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('user', sa.String(length=100), nullable=True),
    sa.ForeignKeyConstraint(['user'], ['user.username'], name=op.f('fk_user_actions_user_user')),
    sa.PrimaryKeyConstraint('id', name=op.f('pk_user_actions'))
    )
    # ### end Alembic commands ###

看起来不错,并且在执行flask db upgrade时可以正常工作。

但是当我第二次运行flask db migrate时,即使架构没有任何变化,它也会产生另一种迁移]]

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_constraint('fk_user_actions_user_user', 'user_actions', type_='foreignkey')
    op.create_foreign_key(op.f('fk_user_actions_user_user'), 'user_actions', 'user', ['user'], ['username'])
    # ### end Alembic commands ###

def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_constraint(op.f('fk_user_actions_user_user'), 'user_actions', type_='foreignkey')
    op.create_foreign_key('fk_user_actions_user_user', 'user_actions', 'user', ['user'], ['username'], referent_schema='{my-schema}')
    # ### end Alembic commands ###

我已经尝试了对烧瓶metadata对象绑定的db进行各种配置设置,但是当使用alembic的自动生成功能时,我总是会得到这种冗余迁移。即使使用此冗余迁移执行升级,当再次运行flask db migrate时,也会得到另一个副本。我与数据库的连接字符串中确实包含模式,因为雪花会另外抱怨:

SQLALCHEMY_DATABASE_URI='snowflake://<my_login_name>:<password>@<account_name>/<database_name>/<schema_name>?warehouse=<warehouse_name>?role=<role_name>'

这里发生了什么?为什么即使架构没有更改,也每次都会产生冗余迁移?我已经阅读了this link,但这对我没有帮助。我没有在任何模型或迁移脚本中指定架构,仅在连接URL中指定。

我正在研究flask应用程序,并通过flask-sqlalchemy连接器将Flask-Migrate与雪花数据库一起使用。我的app / models.py中具有以下模型:类User(db.Model)...

flask flask-sqlalchemy snowflake-data-warehouse alembic flask-migrate
1个回答
0
投票

我将回答我的问题,以供日后使用此功能的人使用:

© www.soinside.com 2019 - 2024. All rights reserved.