是否可以从列中删除唯一约束?

ken*_*uen 3 python sqlite sqlalchemy alembic flask-migrate

我尝试简单地删除unique=True约束并运行

flask db migrate
flask db upgrade
Run Code Online (Sandbox Code Playgroud)

在命令行中,但是当我运行我的烧瓶应用程序时,我仍然收到错误(sqlite3.IntegrityError) UNIQUE constraint failed

有没有一种简单的方法可以使用 Flask-migrate 来做到这一点,或者我应该切换到 alembic (我知道 Flask-migrate 只是围绕着它)?我不想删除整个表。谢谢你的帮助!

Emi*_*röm 5

Flask-Migrate,或者更确切地说 Alembic,不会自动检测匿名约束。但您可以创建手动 Alembic 迁移文件来删除约束。

创建一个空的迁移文件:

flask db revision -m 'Drop unique constraint'
Run Code Online (Sandbox Code Playgroud)

编辑文件以删除约束:

def upgrade():
    op.drop_constraint("name_of_constraint", "table_name")

def downgrade():
    op.create_index(...)
Run Code Online (Sandbox Code Playgroud)

我建议你复制create_index如果可能的话,我建议您从首先创建约束的迁移文件中

然后就可以正常升级数据库了:

flask db upgrade
Run Code Online (Sandbox Code Playgroud)