我正在为一个朋友开发一个小型的zumba类注册应用程序,使用Flask,SQLAlchemy和Flask-migrate(alembic)来处理数据库更新。我选择了SQLite,因为应用程序必须是自包含的,并且在没有互联网接入的笔记本电脑上本地运行,SQLite不需要安装服务或其他服务,这也是必须的。
在最初的开发过程中,处理SQLite缺乏对ALTER表的支持并不是一个问题,因为当问题出现时,我只是简单地销毁并重新创建了DB。但是现在我的朋友实际上正在使用这个应用程序,我面临着一个问题。
在一个特性请求之后,一个表必须被修改,我又一次得到了可怕的“在SQLite方言中不支持ALTER的约束”。我预计将来可能也会出现这个问题。
我该如何处理这个问题?我几乎是一个新手,当涉及到处理数据库。我读到一种处理方法是创建一个新表,创建新的约束,复制数据并重命名表,但我不知道如何在alembic脚本中实现。
2条答案
按热度按时间tvmytwxo1#
您可以在初始迁移时创建的www.example.com文件中设置一个变量(
render_as_batch=True
)env.py。它需要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
mctunoxg2#
对上述答复补充:将
render_as_batch=True
添加到脱机和联机