程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python-Flask-migrate安裝和使用

編輯:Python

在開發過程中,需要修改數據庫模型,而且還要在修改之後更新數據庫。最直接的方式就是刪除舊表,但這樣會丟失數據。

更好的解決辦法是使用數據庫遷移框架,它可以追蹤數據庫模式的變化,然後把變動應用到數據庫中。在Flask中可以使用Flask-Migrate擴展,來實現數據遷移。

環境:window11+pycharm2020.1+Anaconda4.11.0 +python3.7

Flask-sqlalchemy2.5.1

Flask-Migrate:3.1.0

一、Flask-Migrate安裝

安裝Flask-Migrate。pycharm(或Anaconda Prompt)打開控制台,輸入:

pip install flask-migrate

安裝失敗,在導入flask_migrate包的時候,遇到報錯:alembic安裝失敗

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask_migrate

Collecting alembic>=0.7

  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/60/1e/cabc75a189de0fbb2841d0975243e59bde8b7822bacbb95008ac6fe9ad47/alembic-1.4.2.tar.gz (1.1 MB)

解決:

1.先安裝其他歷史版本的alembic,打開

alembic · PyPI

點擊release history

進入歷史版本列表,找到1.4.3版本,點擊進入下載頁:

點擊Download files,下載 alembic-1.4.3-py2.py3-none-any.whl到本地文件夾:

2.打開控制台,cd 進入到放alembic-1.4.3-py2.py3-none-any.whl的文件夾:

輸入:

pip install alembic-1.4.3-py2.py3-none-any.whl

3.提示安裝Mako失敗,打開

Mako · PyPI

下載Mako-1.2.1-py3-none-any.whl到本地文件夾:

4.打開控制台,cd 進入到放Mako-1.2.1-py3-none-any.whl的文件夾,輸入:

pip install Mako-1.2.1-py3-none-any.whl

Mako安裝成功

5.重新安裝alembic,輸入:

pip install alembic-1.4.3-py2.py3-none-any.whl

alembic安裝成功。

6.再重新安裝flask_migrate:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask_migrate

Flask-Migrate安裝成功,安裝版本為3.1.0。

總結:python相關的插件安裝失敗的話,查看到哪一步出的問題,然後到官網直接下載對應版本到本地,進行離線安裝。

二、Flask-Migrate使用

使用flask-migrate 3.1.0 遷移數據庫。

flask-migrate 3.0以下一般和flask-script搭配使用,但是在3.0之後 flask-migrate去掉了MigrateCommand這個模塊,根據flaks-migrate官方文檔,只使用flask-migrate。

1.Flask-Migrate常用命令:

flask db history #查看歷史遷移信息

flask db current #查看當前數據庫版本

flask db init #初始化數據庫

flask db migrate -m "init_database" #數據庫遷移

flask db upgrade #更新數據庫至最新版本

flask db upgrade revision_id #更新數據庫至某一版本revision_id

flask db downgrade #回退一個版本

flask db downgrade revision_id  #回退至某一版本revision_id

2.同步表結構,在控制台中執行命令

a. init 初始化,只需執行一次。

執行init命令,初始化一個遷移文件夾:

flask db init

執行完畢項目中生成一個migrations目錄(如需重新init,需先刪除該目錄再init):

b. migrate--將模型的變更生成遷移文件

執行migrate命令,把當前的模型添加到遷移文件中:

flask db migrate

出現問題:

ModuleNotFoundError: No module named 'MySQLdb'

解決方案:安裝pymysql並將數據庫連接改為 mysql+pymysql:

  1. pip install pymysql
  2. b. 將數據庫連接改為 mysql+pymysql

c.update--謹慎使用

當你執行upgrade的時候它就會把除了該程序之外的所有數據表都記錄下來准備刪除,一但你執行了update,那些非該程序的所有數據表都會被刪除!

執行update命令,把遷移文件中對應的數據庫操作,真正的映射到數據庫中:

flask db upgrade

執行完畢,數據庫中會生成對應的表:

六、參考資料

[1] flask-migrate文檔:

Flask-Migrate — Flask-Migrate documentation


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved