flask migrate無法創建遷移腳本的問題

最近在使用flask寫個小平臺,遇到一個flask migrate無法創建遷移腳本的問題,記錄下。

正常我們使用flask-migrate時,步驟是:

   python manage.py db init #初始化,工程目錄下生成一個migrations文件夾
   python mange.py db migrate
   python manage.py db upgrade

需要確認你之前的操作步驟爲以上三步。(初始化爲三個步驟,之後的遷移只需要執行後兩個步驟)

我在models.py裏面開始創建了幾個模型,但後面由於另外一個問題“mysql字符編碼的問題導致我一個加密數據字段寫不進數據庫”,解決方法裏面“修改mysql的字符編碼格式對已經創建的表是不生效的 ”,所以就把DB裏面的表全部刪掉了。重啓mysql服務後,接下來我就需要執行這兩個 migrate, upgrade 遷移步驟。但真是特別尷尬的,不報錯,DB也不生成表。
執行遷移的兩個命令是下面這樣子的。

  E:\00practice_python\zhileqa20180914>python manage.py db  migrate
  INFO  [alembic.runtime.migration] Context impl MySQLImpl.
  INFO  [alembic.runtime.migration] Will assume non-transactional DDL.

  E:\00practice_python\zhileqa20180914>python manage.py db  upgrade
  INFO  [alembic.runtime.migration] Context impl MySQLImpl.
  INFO  [alembic.runtime.migration] Will assume non-transactional DDL.

嘗試把工程裏面的目錄migrtions 刪掉,從init命令從新開始走一遍,但也還是沒有在db裏面生成表。

爲啥呢?爲啥呢?

解決方法:
因爲第一次init的時候,數據庫中在創建table的同時,也創建了一張alembic_version表,這個表裏面只有一個version_sum字段,它記錄的版本號,和我們init命令在工程下生成的 migrations下面的versions的一個py文件是一樣的。
由於我們刪掉表的時候,沒有把這個自己生成的alembic_version表刪掉,我們只刪掉工程下面migrations的時候,init不會有問題,但在遷移的時候,它檢測數據庫裏面有個版本號,就不會去創建表了。


工程migrations文件目錄

mysql db table

最終,刪掉數據庫裏面的alembic_version表,刪掉工程下生成的 migrations文件目錄。
執行下面三個命令。

python manage.py db init #初始化,之後生成一個migrations文件夾
python mange.py db migrate
python manage.py db upgrade

問題解決:)

E:\00practice_python\zhileqa20180914>python manage.py db  migrate
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [[alembic.autogenerate.compare](http://alembic.autogenerate.compare/)] Detected added table 'user'
INFO  [[alembic.autogenerate.compare](http://alembic.autogenerate.compare/)] Detected added table 'question'
INFO  [[alembic.autogenerate.compare](http://alembic.autogenerate.compare/)] Detected added table 'comment'
Generating 
E:\00practice_python\zhileqa20180914\migrations\versions\d67e41ceca98_.py ... done



E:\00practice_python\zhileqa20180914>python manage.py db  upgrade
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> d67e41ceca98, empty message
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章