我有一個基於Flask的應用程序,我試圖啓用遷移以管理數據庫結構更改。在我開始使用alembic和flask-migrate之前,我的數據庫不是空的,並且包含表和記錄。Alembic/Flask-migrate無法識別數據庫結構
首先,我試圖用蒸餾器獨立的,只是PIP安裝蒸餾器,然後配置一切,並使用自動生成爲產生差異。所有工作正常,但輸出不正是我所料:
INFO [alembic.autogenerate.compare] Detected removed table u'user'
Generating /Users/me/Documents/Project/app/migrations/versions/3de1151ce5de_.py ... done
所以表用戶實際上是存在於我的數據庫(我認爲這是PostgreSQL中預留表),我從來沒有刪除它。另外,我還有一堆其他表似乎對alembic不可見的表格。起初我以爲我沒有正確配置alembic,所以我重新開始並決定嘗試this nice flask extension by Miguel Grinberg。這個設置很容易,但結果是完全一樣的信息。
任何想法我做錯了什麼?
編輯:我決定將我如何編輯我原來的蒸餾器env.py一些重要的信息:
....
import sys,os sys.path.append(os.getcwd())
import app from app import db
target_metadata = db.metadata
....
def run_migrations_online():
"""Run migrations in 'online' mode.
In this scenario we need to create an Engine
and associate a connection with the context.
"""
# all the models need to be imported so they are visible when migration runs
from app.models import Model1, Model2, Model3, Model4, Model5
...
這種變化是必要的蒸餾器,看看我的聲明的基礎和之前的任何車型遷移開始。放棄獨立的方法後,我只是遵循燒瓶遷移教程,並沒有觸及任何文件。
編輯:好的,所以我們已經刪除了'user'表。儘管如此,我的其他模型並沒有出現在腳本中。我認爲會發生什麼情況是因爲在創建遷移腳本之前啓動應用程序,所以sqlalechmy db.create_all()調用會創建表,這就是爲什麼alembic在colums vs模型中看不到任何區別。也許我打電話create_all()在錯誤的地方?
編輯:是的!就是這樣,我將db.create_all()移到以下manager.run()並且它現在檢測到更改正確。感謝所有的幫助!
好的,但這隻能解決一半的問題。我知道每次都需要檢查自動創建的遷移腳本,但我的其他模型不會顯示 - 請參閱我編輯的問題。 – lawicko
當您使用Flask-Migrate/Alembic時,不要調用'db.create_all()'。遷移框架將取代該呼叫。 – Miguel