【问题标题】:Flask Migrate (Alembic) Not Creating MigrationsFlask Migrate (Alembic) 不创建迁移
【发布时间】:2021-11-08 05:00:10
【问题描述】:

我有一个相当大的 Flask 应用程序,我创建新数据表的典型工作流程如下:

我在models.py中创建了一个类,如下:

class ExampleModel(db.Model):
    __tablename__ = 'example_table'

    id = db.Column(db.Integer, primary_key=True)
    text = db.Column(db.String(100))

然后我运行flask db migrateflask db upgrade。执行完这些命令,表就创建好了,可以正常插入数据了

item = ExampleModel(text='something')
db.session.add(item)
db.session.commit()

到目前为止,我在使用上述工作流程时没有遇到任何问题,甚至在我开始遇到问题之前也是如此。我添加了一个表,然后向其中添加了一些列,基本上只是遇到了可空值和诸如此类的问题(用户错误)。除了删除一些模型类、迁移脚本,并在 psql 中手动删除了一个表(我使用的是 Postgres)之外,我并没有做太多事情。

现在,我无法从上面执行测试用例 (ExampleModel)。当我尝试这个简单的示例时,没有在迁移目录中创建迁移脚本

flask db migrate 的输出:

INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.

flask db upgrade 的输出:

INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.

我尝试过的事情:

  • 从 master 变基,本质上是重新开始
  • 使用上面的测试模型
  • 删除migrations 目录并创建一个新目录

我的 config 和 init 文件应该没问题 - 自上次工作以来它们没有改变。我被这个难住了

【问题讨论】:

  • Flask-Migrate 的 Alembic 配置中存在一个旧错误,导致某些错误消息无法打印到终端。我相信这在前一段时间已经修复,所以我的建议是你检查你是否使用最新的 Flask-Migrate,因为那些没有显示有用输出的迁移和升级命令肯定是不正常的。如果您在最新的 Flask-Migrate 中看到这一点,那么我可以进一步查看日志记录配置,看看是否仍然存在任何问题。

标签: python flask flask-sqlalchemy alembic flask-migrate


【解决方案1】:

过了一会儿,我就可以让它工作了。这就是我所做的:

  • 从我的数据库中删除了 alembic_version 表 (DROP)
  • 使用flask db stamp head 制作了一个新的 alembic_version 表

从那里我可以使用典型的工作流程添加表格。

我将其保持打开状态,因为我不确定上述是否是解决问题的正确方法——我可能在处理它时做了其他事情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-04
    • 2015-12-24
    • 2020-04-20
    • 2019-07-13
    • 2018-09-09
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多