我正在研究烧瓶应用程序,并通过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(),sa.Column('user',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',['user'],['username'])
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint(op.f('fk_user_actions_user_user'),type_='foreignkey')
op.create_foreign_key('fk_user_actions_user_user',['username'],referent_schema='{my-schema}')
# ### end Alembic commands ###
我已经尝试了对绑定到烧瓶metadata
对象的db
进行各种配置设置,但是当使用alembic的自动生成功能时,总是会得到这种冗余迁移。即使我使用此冗余迁移执行升级,当再次运行flask db migrate
时,也会得到另一个副本。我与db的连接字符串中确实包含模式,因为雪花会抱怨:
SQLALCHEMY_DATABASE_URI='snowflake://<my_login_name>:<password>@<account_name>/<database_name>/<schema_name>?warehouse=<warehouse_name>?role=<role_name>'
这是怎么回事?为什么即使架构没有更改,也每次都会产生冗余迁移?我已经阅读了this link,但这并没有帮助我。我没有在任何模型或迁移脚本中指定架构,仅在连接URL中指定
。