在開發程式的過程中,你會發現有時需要修改資料庫模型,而且修改之後還需要更新資料庫。僅當資料庫表不存在時, flask-sqlalchemy 才會根據模型進行建立。因此,更新表的唯一方式就是先刪除舊表,不過這樣做會丟失資料庫中的所有資料。
更新表的更好方法是使用資料庫遷移框架。原始碼版本控制工具可以跟蹤原始碼檔案的變化,類似地,資料庫遷移框架能跟蹤資料庫模式的變化,然後增量式的把變化應用到資料庫中。sqlalchemy 的主力開發人員編寫了乙個遷移框架,稱為 alembic( 除了直接使用 alembic 之外, flask 程式還可使用 flask-migrate( 擴充套件。這個擴充套件對 alembic 做了輕量級包裝,並整合到 flask-script 中,所有操作都通過 flask-script 命令完成。
1 建立遷移倉庫
首先,我們要在虛擬環境中安裝 flask-migrate:
(venv) $ pip install flask-migrate
這個擴充套件的初始化方法如下 配置 flask-migrate
from flask.ext.migrate import migrate, migratecommand
# ...
manager.add_command('db', migratecommand)
為了匯出資料庫遷移命令, flask-migrate 提供了乙個 migratecommand 類,可附加到 flaskscript 的 manager 物件上。在這個例子中, migratecommand 類使用 db 命令附加。
在維護資料庫遷移之前,要使用 init 子命令建立遷移倉庫:
(venv) $ python hello.py db init
這個命令會建立 migrations 資料夾,所有遷移指令碼都存放其中。
2 建立遷移指令碼
在 alembic 中,資料庫遷移用遷移指令碼表示。指令碼中有兩個函式,分別是 upgrade() 和downgrade()。 upgrade() 函式把遷移中的改動應用到資料庫中, downgrade() 函式則將改動刪除。 alembic 具有新增和刪除改動的能力,因此資料庫可重設到修改歷史的任意一點。我們可以使用 revision 命令手動建立 alembic 遷移,也可使用 migrate 命令自動建立。手動建立的遷移只是乙個骨架, upgrade() 和 downgrade() 函式都是空的,開發者要使用alembic 提供的 operations 物件指令實現具體操作。自動建立的遷移會根據模型定義和資料庫當前狀態之間的差異生成 upgrade() 和 downgrade() 函式的內容。
3 更新資料庫
檢查並修正好遷移指令碼之後,我們可以使用 db upgrade 命令把遷移應用到資料庫中:
對第乙個遷移來說,其作用和呼叫 db.create_all() 方法一樣。但在後續的遷移中,upgrade 命令能把改動應用到資料庫中,且不影響其中儲存的資料。
django bug 遷移資料庫
1 執行 python manage.py makemigrations 報錯,遷移失敗 解決辦法 新增預設值 default,重新進行遷移 class author models.model name models.charfield max length 50 email models.emai...
mysqldump遷移資料庫
同事接手了乙個第三方專案,需要把資料庫也遷移到本地。備份 mysqldump h127.0.0.1 uroot p 123 flush logs single transaction all databases test.sql 壓縮 傳輸 tar pczvf test.sql.gz test.sq...
Flask資料庫遷移
在開發過程中,需要修改資料庫模型,且還要在修改之後更新資料庫。最直接的 式就是刪除 舊表,但這樣會丟失資料。更好的解決辦法是使 資料庫遷移框架,它可以追蹤資料庫模式的變化,然後把變動應 到資料 庫中。在flask中可以使 flask migrate擴充套件,來實現資料遷移。並且整合到flask sc...