Sqlite缺乏ALTER支持,因此Alembic迁移失败.解决方案?

Kin*_*olf 13 sqlite sqlalchemy alembic

我正在为朋友zumba类开发一个小型注册应用程序,使用Flask,SQLAlchemy和Flask-migrate(alembic)来处理db update.我决定使用SQlite,因为应用程序必须是自包含的并且在没有Internet访问的笔记本电脑上本地运行,并且SQLite不需要安装服务或其他服务,这也是必须的.

处理SQLite缺乏对ALTER表的支持在初始开发期间不是问题,因为我只是销毁,在出现问题时重新创建数据库.但是现在我的朋友实际上正在使用该应用程序我遇到了问题.

在功能请求之后,必须修改一个表,并再一次得到可怕的""不支持SQLite方言中约束的ALTER".我预见这个问题将来也可能出现.

我该如何处理这个问题?在处理数据库方面,我几乎是一个新手.我读到一种处理方法是创建一个新表,创建新约束并复制数据并重命名表,但我不知道如何在alembic脚本中实现它.

Jot*_*loo 17

您可以render_as_batch=True在使用初始migation创建的env.py文件中设置variable().

context.configure(
    connection=connection,
    target_metadata=target_metadata,
    render_as_batch=True
)
Run Code Online (Sandbox Code Playgroud)

它需要alembic> 0.7.0

这样可以生成批处理操作迁移,即创建带有约束的新表,复制现有数据,并删除旧表.请参阅http://alembic.zzzcomputing.com/en/latest/batch.html#batch-mode-with-autogenerate

如果您仍然遇到问题,请注意 - sqlite仍有细微差别,例如http://alembic.zzzcomputing.com/en/latest/batch.html#dropping-unnamed-or-named-foreign-key-constraints

  • 感谢您的参考。上面的链接现已损坏,但该页面可在 http://alembic.zzzcomputing.com/en/latest/batch.html 上找到 (2认同)