創建藍本後使用flask-migrate無法創建遷移腳本的問題

背景:

我是一開始沒有使用migrate這個功能,後來學到《Flask web開發》第八章後覺得不能遷移數據庫太不方便了,就想回來學習下flask-migrate的使用

問題:

但是這時候我的hello.py已經使用藍本分離成manage.py了,關於數據庫的信息位於models.py裏面,若是直接像書上一樣
先輸入python manage.py db init創建遷移倉庫,顯示的還正常:

Creating directory C:\Users\kai\PycharmProjects\practice\myflasky\migrations ... done
Creating directory C:\Users\kai\PycharmProjects\practice\myflasky\migrations\versions ... done
Generating C:\Users\kai\PycharmProjects\practice\myflasky\migrations\alembic.ini ... done
Generating C:\Users\kai\PycharmProjects\practice\myflasky\migrations\env.py ... done
Generating C:\Users\kai\PycharmProjects\practice\myflasky\migrations\README ... done
Generating C:\Users\kai\PycharmProjects\practice\myflasky\migrations\script.py.mako ... done
Please edit configuration/connection/logging settings in 'C:\\Users\\kai\\PycharmProjects\\practice\\myflasky\\migrations\\alembic.ini' before proceeding.

但是之後再輸入python manage.py db upgrade創建遷移腳本後,就不對了:

(base) C:\Users\kai\PycharmProjects\practice\myflasky>python manage.py db migrate -m "initial migration"
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.env] No changes in schema detected.

缺少
Detected added table 'roles'
Detected added table 'users'

這兩行,進入migrations文件夾中的versions發現的確是空的,證明創建腳本失敗

求解過程:

先是在網上查了一圈,參考了mrchi杜志鵬的回答,瞭解到應該是flask-migrate沒有偵測到我的db數據導致的,但是我的manage.py中是有
from app import create_app, db
from app.models import User, Role

def make_shell_context():
    return dict(app=current_app, db=db, User=User, Role=Role, Permission=Permission)

manager.add_command("shell", Shell(make_context=make_shell_context))
manager.add_command('db', MigrateCommand)

借鑑杜志鵬的評論,嘗試cd到app中使用python models.py db migrate -m “initial migration”不過直接報錯了。
接着參考mrchi的問題中的描述,我在cmd中輸入命令前輸python manage.py shell進入交互,再輸入

from app import db
from app.models import User, Role

來導入模型,在輸入創建腳本指令,不過結果還是一樣的。
期間我還在segment上提了問題,但是結果也還不是很滿意

最終解決辦法

在經歷前面的折騰,想到我的代碼和操作應該是沒有問題的,只可能是一些前提錯了,於是我就想到了

INFO  [alembic.env] No changes in schema detected.

這句話,既然說沒有變化你就不創建,那我就把你(sqlite)刪了,看你還說不說沒有變化,於是。。。

(base) C:\Users\kai\PycharmProjects\practice\myflasky>python manage.py db migrate -m "inital migration"
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added table 'roles'
INFO  [alembic.autogenerate.compare] Detected added index 'ix_roles_default' on '['default']'
INFO  [alembic.autogenerate.compare] Detected added table 'users'
INFO  [alembic.autogenerate.compare] Detected added index 'ix_users_email' on '['email']'
INFO  [alembic.autogenerate.compare] Detected added index 'ix_users_username' on '['username']'
Generating C:\Users\kai\PycharmProjects\practice\myflasky\migrations\versions\c08a64ca29fc_inital_migration.py ... done

(base) C:\Users\kai\PycharmProjects\practice\myflasky>python manage.py db upgrade
INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> c08a64ca29fc, inital migration

成功了!
不過頓時覺得自己像個逗比。。。

發佈了35 篇原創文章 · 獲贊 16 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章