Flask框架+mySQL數據庫:誤刪migrations文件夾後再次創建時遭遇錯誤(Can't locate revision identified by ‘xxx’)

先說一下如何把數據庫與Flask框架下的Python後臺(服務器)連接起來:

1、模型初始化環境:

命令:python manage.py db init
cmd的迴應:

Creating directory F:\code\flask_project\migrations ... done
Creating directory F:\code\flask_project\migrations\versions ... done
Generating F:\code\flask_project\migrations\alembic.ini ... done
Generating F:\code\flask_project\migrations\env.py ... done
Generating F:\code\flask_project\migrations\env.pyc ... done
Generating F:\code\flask_project\migrations\README ... done
Generating F:\code\flask_project\migrations\script.py.mako ... done
Please edit configuration/connection/logging settings in 'F:\\code\\flask_project\\migrations\\alembic.ini' before proceeding.

這時就可以在項目文件夾中看到子文件夾migrations


2、把表中模型映射到數據庫中 先生成遷移文件

命令:python manage.py db migrate
cmd迴應:

INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'answer'
Generating F:\code\flask_project\migrations\versions\3007cf54a530_.py ... done

這時打開migration文件夾後再打開versions文件夾會看到形如3007cf54a530_.py文件和3007cf54a530_.cpy文件


3、再把遷移文件映射到數據庫中
命令:python manage.py db upgrade
cmd迴應:

INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> 3007cf54a530, empty message

以上是正常的情況
今天我手殘,項目做到一半把migrations文件誤刪了,而且這個文件刪除後是無法找回的,回收站裏是找不到的
於是我重新執行步驟一,成功
執行步驟二,報錯:

alembic.util.exc.CommandError: Can't locate revision identified by '68c8e45e399c'

於是就懵逼了,後來終於找到一篇相關文章
把問題解決了

我的理解是:
當把後臺與數據庫建立關係後,雙方會分別產生一個“接口”,後臺的“接口”是migrations文件夾中的versions文件夾中的文件;數據庫的“接口”是這個表“alembic_version”(蒸餾器版本?什麼鬼名字?)
我把migrations刪除後,alembic_version沒有改變。當我新建一個migrations後,兩個“接口”對不上了,所以會報錯:
alembic.util.exc.CommandError: Can't locate revision identified by '68c8e45e399c'

所以這種錯誤最簡單的解決辦法就是把數據庫中的alembic_version表刪掉,然後就可以繼續後面的操作了

其他關於用alembic進行版本控制的東西我就不多說了,有興趣的請自行百度

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章