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

raogr8fs  于 2023-06-06  发布在  SQLite
关注(0)|答案(2)|浏览(222)

我正在为一个朋友开发一个小型的zumba类注册应用程序,使用Flask,SQLAlchemy和Flask-migrate(alembic)来处理数据库更新。我选择了SQLite,因为应用程序必须是自包含的,并且在没有互联网接入的笔记本电脑上本地运行,SQLite不需要安装服务或其他服务,这也是必须的。
在最初的开发过程中,处理SQLite缺乏对ALTER表的支持并不是一个问题,因为当问题出现时,我只是简单地销毁并重新创建了DB。但是现在我的朋友实际上正在使用这个应用程序,我面临着一个问题。
在一个特性请求之后,一个表必须被修改,我又一次得到了可怕的“在SQLite方言中不支持ALTER的约束”。我预计将来可能也会出现这个问题。
我该如何处理这个问题?我几乎是一个新手,当涉及到处理数据库。我读到一种处理方法是创建一个新表,创建新的约束,复制数据并重命名表,但我不知道如何在alembic脚本中实现。

tvmytwxo

tvmytwxo1#

您可以在初始迁移时创建的www.example.com文件中设置一个变量(render_as_batch=True)env.py。

context.configure(
    connection=connection,
    target_metadata=target_metadata,
    render_as_batch=True
)

它需要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

mctunoxg

mctunoxg2#

对上述答复补充:将render_as_batch=True添加到脱机和联机

相关问题