【问题标题】:Unable to find source of: ERROR [root] Error: Can't locate revision identified by '..'无法找到来源:错误 [root] 错误:找不到由“..”标识的修订版
【发布时间】:2020-01-05 13:34:54
【问题描述】:

我正在尝试从命令行运行迁移并不断收到错误: ERROR [root] Error: Can't locate revision identified by 'faf3ebfbe667'

按照其他帖子中的建议,我删除了我的 sqlite db 和迁移文件夹(多次)。我也重新创建了虚拟环境。我检查了我的项目文件夹中的所有文件以获取对修订的引用,但在那里我找不到任何东西。错误仍然存​​在。 我试图在 db 中删除 alembic_version 但这样的表不存在。

我尝试从命令行运行迁移,如下所示:

set FLASK_APP=my_app/__init__.py
flask db init
flask db migrate
flask db upgrade

【问题讨论】:

  • SQLALCHEMY_DATABASE_URI 配置变量的值是多少?
  • 它是:'sqlite:///site.db'
  • alembic/versions: (1) 删除 pycache 文件夹中的所有文件 (2) grep for "faf3ebfbe667": 如果它出现在文件中你需要更正任何引用,或者如果该文件不属于您的 Alembic 历史记录,则将其删除。最好在执行此操作之前备份alembic/versions。 (或者你可以用你的发现更新问题)。

标签: python sqlite flask flask-migrate


【解决方案1】:

转到您的数据库并删除下表: alembic_versions

【讨论】:

    【解决方案2】:

    删除数据库中的表

    alembic_version

    然后使用

    再次创建它
    $ python run.py db stamp heads
    

    【讨论】:

      【解决方案3】:

      这是我迟到的答案,但我希望它对你有所帮助。

      您可以使用这种方式来解决问题。

      $ flask db revision --rev-id faf3ebfbe667
      $ flask db migrate
      $ flask db upgrade
      

      谢谢。

      【讨论】:

        【解决方案4】:

        转到迁移中的文件夹版本(例如:迁移)

        1. 如果您没有看到文件夹版本或文件夹版本中没有修订,请键入以下命令来创建修订

          • flask db 修订版
        2. 如果文件夹内已有修订 打开它并用'faf3ebfbe667'替换修订ID,如下所示

          • revision = "faf3ebfbe667"
        3. 再次输入命令flask db migrate

        它对我有用。

        【讨论】:

          【解决方案5】:

          您在上面提到您的数据库 URL 是 sqlite:///site.db。这是一个相对路径,文件site.db 将在当前目录中创建,不管它是什么。

          既然你说明显提到了一个不存在的数据库修订,我猜你有多个数据库文件,你删除的那个不是从你运行的当前目录中提取的那个应用。

          我建议您切换到绝对路径 URL 以避免出现问题。我不确定这是否是问题,但即使不是,您也应该使用绝对路径。请参见下面的示例:

          import os
          basedir = os.path.abspath(os.path.dirname(__file__))
          SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'site.db')
          

          这将使数据库文件的绝对位置与包含此代码的脚本的位置相同。

          【讨论】:

            【解决方案6】:

            我的案例是 dockerpython 3.8ubuntu 20.04 lts。错误信息是:

            ERROR [root] 错误:找不到由“3d42f5f6cf4b”标识的修订版

            由于我在migration/versions中没有这样的版本文件,所以我只是销毁了所有容器和镜像并再次运行sudo docker-compose build,现在它可以工作了。

            【讨论】:

              【解决方案7】:

              如果这对其他人有帮助,我执行了以下操作来解决错误:

              1. 转到migrations/versions 并找到最近创建的迁移文件。
              2. 获取了该迁移的修订标识符(应该在导入下,在读取为 # revision identifiers, used by Alembic 的评论下)。
              3. alembic_version 表中,我使用第二步中的修订标识符更新了version_num 列。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2016-10-15
                • 2013-12-31
                • 1970-01-01
                • 2016-12-05
                • 1970-01-01
                • 1970-01-01
                • 2013-03-01
                相关资源
                最近更新 更多