我已经使用SQLAlchemy设置了一个本地Postgres DB,并且无法提交我的第一个条目.我继续犯这个错误......
ProgrammingError: (ProgrammingError) relation "user" does not exist LINE 1: INSERT INTO "user" (name, email, facebook_id, facebook_token...
看起来这些字段与数据库中的字段不匹配.我正在尝试使用flask-migrate进行迁移,但是,当我运行时,$ python app.py db migrate
我收到此错误...
raise util.CommandError("No such revision '%s'" % id_) alembic.util.CommandError: No such revision '39408d6b248d'
最好删除所有内容并从头开始,因为我似乎已经破坏了我的数据库设置和/或迁移,但我不知道如何.
更新:数据库现在已经开始工作(我删除并再次创建它).但是,我仍然在尝试运行迁移时遇到同样的错误,结果是"没有这样的修订'39408d6b248d'指的是从一个不相关的项目迁移.我重新安装了flask-migrate但同样的错误.
要做的第一步是运行此命令,
alembic current
您应该得到如上所述的错误(目标是确保此命令返回有效的响应).
你得到这个的原因是bc alembic对你当前的状态感到困惑.它假设你应该进行修订,39408d6b248d
但随后决定该修订无效.
调查这一点,让我们看看哪个版本都视为由蒸馏器有效,运行以下命令:
alembic history --verbose
您将获得所有以前版本的列表(注意:在每个修订旁边附加消息是个好主意..将其视为一个好的git提交消息)
Rev: 594cc72f56fd (head) Parent: 262f40e28682 Path: *************** adjust context_id in log table so that it is a substring of the object_id Revision ID: 594cc72f56fd Revises: 262f40e28682 Create Date: 2015-07-22 14:31:52.424862 Rev: 262f40e28682 Parent: 1dc902bd1c2 Path: *************** add context_id column to log table Revision ID: 262f40e28682 Revises: 1dc902bd1c2 Create Date: 2015-07-22 11:05:37.654553 Rev: 1dc902bd1c2 Parent: <base> Path: *************** Initial database setup Revision ID: 1dc902bd1c2 Revises: Create Date: 2015-07-06 09:55:11.439330
上述修订39408d6b248d
中不存在修订.此修订版存储在数据库中的alembic_table中.您可以通过转到dbase并运行来验证:
$ select * from alembic_version; version_num -------------- 57ac999dcaa7
所以现在你应该检查你的数据库的状态,看看它适合上面输出的修订版:
在我的情况下,通过戳我的dbase,很明显我现在正在修改哪个...这是dbase已经设置,但其他修订尚未包括在内.
所以现在我用以上历史命令中找到的值替换dbase上的值:
vibereel=> update alembic_version set version_num = '1dc902bd1c2';
现在运行alembic当前返回
INFO [alembic.migration] Context impl PostgresqlImpl. INFO [alembic.migration] Will assume transactional DDL. 1dc902bd1c2
完成.
Alembic将迁移历史记录保存在您的数据库中,这就是为什么它仍然认识到那里有另一个修订版.我将我的项目保留在Heroku上,所以我能够做到heroku pg:pull ...能够获得我的数据库的新副本.在此之前,您将不得不删除本地数据库.如果您不想放弃本地,我认为删除表也应该有效.我使用PG Commander作为GUI工具来快速浏览我的数据库.
flask-migrate将在您的数据库中创建一个名为"alembic_version"的表.
因此,您应该删除此表并删除项目中的迁移文件夹.
然后$ python app.py db init
再次使用......
我认为$ python app.py db migrate
会很好.