【问题标题】:Sqlite lack of ALTER support, Alembic migration failing because of this. Solutions?Sqlite 缺乏 ALTER 支持,因此 Alembic 迁移失败。解决方案?
【发布时间】:2015-08-03 09:16:36
【问题描述】:

我正在为一个朋友 zumba 课程开发一个小型注册应用程序,使用 Flask、SQLAlchemy 和 Flask-migrate(alembic) 来处理数据库更新。我选择了 SQlite,因为该应用程序必须是独立的,并且必须在没有互联网访问的笔记本电脑上本地运行,而且 SQLite 不需要安装服务或其他服务,这也是必须的。

在最初的开发过程中,处理 SQLite 缺乏对 ALTER 表的支持并不是问题,因为我只是简单地销毁,在出现问题时重新创建了数据库。但是现在我的朋友实际上正在使用该应用程序,我遇到了一个问题。

根据功能请求,必须修改表,我又一次得到了可怕的“不支持 SQLite 方言中约束的 ALTER”。我预见这个问题将来也可能会出现。

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

【问题讨论】:

标签: sqlite sqlalchemy alembic


【解决方案1】:

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

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

【讨论】:

  • 感谢您的参考。上面的链接现已损坏,但该页面可在alembic.zzzcomputing.com/en/latest/batch.html
  • 感谢更新的链接@xolox 我想确保其他任何人都可以随时使用这个问题,您习惯性地使用更新的链接编辑原始答案?
猜你喜欢
  • 1970-01-01
  • 2016-08-13
  • 2018-03-10
  • 2017-07-18
  • 2016-04-02
  • 1970-01-01
  • 2021-01-05
  • 2023-03-15
  • 2020-02-17
相关资源
最近更新 更多