我的Flask应用使用了Flask-migrate来管理数据库,今天在一个旧表里添加了一个ForignKey,flask db migrate正常,但在flask db upgrade的时候报错“ERROR [root] Error: No support for ALTER of constraints in SQLite dialect”。
上网查找解决方法,发现一个方法,在migrations的文件夹中对alembic的config需要做些改变,在run_migrations_offline和run_migrations_online函数的contex.configure中添加render_as_batch=True的参数,如下所示:
context.configure(
url=url, target_metadata=target_metadata, literal_binds=True,
render_as_batch=True,
)
和
context.configure(
connection=connection,
target_metadata=target_metadata,
process_revision_directives=process_revision_directives,
render_as_batch=True,
**current_app.extensions['migrate'].configure_args
)
完成后把之前migrate生成的脚本删掉,重新migrate一次。但在upgrade的时候依然报错,这次报错内容是“ValueError: Constraint must have a name”。再经过stack overflow的帮助,在migrate生成的脚本中把
batch_op.create_foreign_key(None, 'users', ['creator_id'], ['id'])
#变为
batch_op.create_foreign_key('creator_id', 'users', ['creator_id'], ['id'])
问题得到解决。