这是已经发生和正在发生的事件链
目前我在第3天
如果从第0天开始,有很多关于如何让Flask-migrate运行的文档。您只需致电flask db init
,flask db migrate
和flask db upgrade
。
然而,就我而言,它有点不同。我运行了命令,我的第一个版本的迁移是空。然后我修改了我的数据库模式并生成了一个新的迁移。现在,我的最新迁移只有一行迁移,即将新行添加到表中。
我意识到我的迁移都没有用于创建数据库的实际模式,这应该是您在第1天开始进行flask-migrate时看到的第一次迁移。
如果我要从头开始克隆我的回购邮件:
flask db migrate
会产生alembic.util.exc.CommandError: Target database is not up to date.
。
flask db upgrade
会产生sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) relation "offer" does not exist
。
我该怎么做才能解决这个问题?
答案 0 :(得分:15)
您有两种选择。
1)如果您只想跟踪数据库迁移
flask db init
,以创建迁移存储库。flask db migrate
,以生成迁移。迁移脚本中只包含新列。flask db upgrade
以将新迁移应用于您的数据库。此时您的数据库应该有新列,您可以继续工作。需要进行其他更改时,请重复上述步骤。
请注意,使用此方法,您无法从头开始重新创建整个数据库。您必须有一种方法将数据库初始化为第1天的架构,然后您可以将迁移历史记录应用到该架构,以将其升级到当前架构。
2)如果您想跟踪整个迁移历史记录,包括您将Flask-Migrate添加到应用程序当天的架构。
这有点棘手,但可以做到。
flask db init
开始,以创建迁移存储库。flask db migrate
。这将生成包含数据库的整个模式的迁移。flask db stamp head
将数据库标记为已更新。flask db migrate
,以生成第二次迁移。迁移脚本中只包含新列。flask db upgrade
以将新迁移应用于您的数据库。希望这有帮助!
答案 1 :(得分:0)
我使用简单的步骤来跟踪整个迁移历史:
flask db init
以创建新迁移。flask db migrate
以从头开始初始化您现有的模块迁移。flask db stamp head
这将使用正确的迁移版本在数据库中创建 alembic_version 表。现在很高兴使用此迁移到将来使用。