无法完成Flask-Migration

 手机用户2502930741 发布于 2023-02-06 07:49

我已经使用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但同样的错误.

3 个回答
  • 要做的第一步是运行此命令, 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
    

    完成.

    2023-02-06 08:05 回答
  • Alembic将迁移历史记录保存在您的数据库中,这就是为什么它仍然认识到那里有另一个修订版.我将我的项目保留在Heroku上,所以我能够做到heroku pg:pull ...能够获得我的数据库的新副本.在此之前,您将不得不删除本地数据库.如果您不想放弃本地,我认为删除表也应该有效.我使用PG Commander作为GUI工具来快速浏览我的数据库.

    2023-02-06 08:05 回答
  • flask-migrate将在您的数据库中创建一个名为"alembic_version"的表.
    因此,您应该删除此表并删除项目中的迁移文件夹.
    然后$ python app.py db init再次使用......
    我认为$ python app.py db migrate会很好.

    2023-02-06 08:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有