2014-10-10 46 views
1

在此設置下保存數據:在遷移

-Development environment 
-Flask 
-SQLAlchemy 
-Postgres 
-Possibility Alembic 

如果我有填充了隨機數據的一些表的數據庫。據我所知Flask-Migrate,這將使用Alembic,不會保留數據,只保留模型和數據庫同步。

差異之間使用Alembic或只是刪除>創建所有表?

喜歡的東西:

db.create_all() 

第二個問題:

發生的數據模型時,事情的變化是什麼?數據會丟失?或者Alembic可以保留以前填充的數據?

那麼,我的想法是用一些數據填充數據庫,然後在模型更改時避免任何數據丟失 。 Alembic是解決方案嗎?

或者我需要從.sql文件中導入數據,例如,當我更改模型和數據庫時?

回答

9

我是Flask-Migrate作者。

你是不正確的。 Flask-Migrate(通過Alembic)將始終保留數據庫中的數據。這是處理數據庫遷移的關鍵,您不希望丟失數據。

看來你已經有一個數據庫中的數據,你想開始使用遷移。你有兩個選擇納入瓶,遷移到您的項目:

  1. 只跟蹤遷移前進,即離開你的初始數據庫架構遷移跟蹤之外。

    爲此,你真的沒有什麼特別的事情要做。只需執行manage.py db init即可創建遷移存儲庫,並且在需要遷移數據庫時通常可以使用manage.py db migrate。這種方法的缺點是Flask-Migrate/Alembic沒有數據庫的初始模式,所以不可能從頭開始重新創建數據庫。

  2. 實施初始遷移,將您的數據庫置於當前狀態,然後繼續正常跟蹤將來的遷移。

    這需要一點點技巧。在這裏,您希望Alembic記錄定義您當前模式的初始遷移。由於Alembic通過將模型與數據庫進行比較來創建遷移,所以訣竅是用空數據庫替換實際數據庫,然後生成遷移。在記錄初始遷移後,您可以恢復數據庫,然後您可以繼續正常遷移數據庫。

我希望這有助於。如果您還有其他問題,請告訴我。

+0

感謝您的回答和更正。你關於燒瓶的書也非常好。謝謝 – user2990084 2014-10-13 14:24:40

+0

米格爾,遷移沒有認識到這樣的'從app.users.models導入用戶'?例如,如果我將模型直接放在manage.py文件中,所有工作都很好,但如果我導入,模型將被忽略。要進行調試,用戶的打印將顯示sqlalchemy對象,以便正確導入。 – user2990084 2014-10-15 23:19:34

+0

確保在初始化SQLAlchemy之前導入模型。 – Miguel 2014-10-15 23:25:08