2015-08-31 24 views
13

我正在嘗試使用alembic處理我的項目上的本地遷移。它的工作是第一次,但後來我需要刪除的文件夾,重新啓動。(不要問爲什麼,我剛)我下面this tutorial我運行命令alembic util命令錯誤找不到標識符

python manage.py db init 

它是確定。但是,當我嘗試運行

python manage.py db migrate 

我得到這個錯誤:

alembic.util.CommandError: Can't locate revision identified by '31b8ab83c7d' 

現在,似乎蒸餾器正在尋找不存在了修訂。無論如何,讓alembic忘記那個文件?或者像重新啓動比較從無到 - >自動生成了嗎?

回答

39

Alembic將版本歷史存儲在您的數據庫中。因此它使用存儲在數據庫中的值來搜索修訂。我個人數據庫的版本號是存儲在表alembic_version

mysql> SELECT * FROM alembic_version; 
+-------------+ 
| version_num | 
+-------------+ 
| c8ad125e063 | 
+-------------+ 
1 row in set (0.00 sec) 

提示:使用命令SHOW TABLES如果它是一個基於SQL數據庫,看看錶。

解決你的問題簡單地使用命令:

DROP TABLE alembic_version; 

或者是其他數據庫版本表的名稱是。 然後你需要使用命令重新初始化遷移文件夾:

python manage.py db init 

,然後創建一個新的遷移:

python manage.py db migrate 

然後你應該去的好,在蒸餾器的工作遷移。

+1

感謝您的回答。有效。 –

+0

非常感謝!!!!! –

7

SirKaiserKai的解決方案並不適合我,可能是因爲我上次犯了一個愚蠢的錯誤,我上次遷移並刪除了一個我應該保留的文件。

而不是丟掉alembic_revision表我剛更新了version_num的值,以匹配我知道我的數據庫的位置。

確保您使用的文件的遷移ID匹配您的數據庫的當前狀態

  1. 檢查缺失遷移數

    psql=> SELECT * FROM alembic_version; 
    +-------------------------+ 
    |  version_num  | 
    +-------------------------+ 
    | <the missing migration> | 
    +-------------------------+ 
    (1 row) 
    
  2. 更新的價值

    psql=> UPDATE alembic_version 
    psql-> SET version_num = '<true state of DB>' 
    psql-> WHERE version_num = '<the missing migration>'; 
    UPDATE 1 
    

如果您的數據庫處於遷移文件<true state of DB>以外的狀態,那麼您將繼續出現錯誤。