天天看點

【python-flask學習筆記】3.6 SQLAlchemy-flask-migrate1、簡介及安裝2、準備工作3、運作

1、簡介及安裝

  • 在實際開發中經常存在後期進行資料庫修改行為,一般我們修改資料庫不會手動修改,而是修改ORM對應的模型,然後把資料庫模型映射到資料庫中。
  • 之前的方法

    db.creat_all()

    方法隻在第一次運作時會執行,在後期再次修改資料庫的字段時,不會再自動的映射到資料庫中,必須删除表,然後重新運作

    db.creat_all()

    才能生效,重新進行映射。這不符合我們的需求。
  • 是以

    flask-migrate

    就是解決這個問題的。

    flask-migrate

    是基于

    Alembic

    進行的一個封裝,并內建到Flask中,而所有的遷移操作其實都是

    Alembic

    做的,他能跟蹤模型的變化,并将變化映射到資料庫中

    使用

    flask-migrate

    需要安裝,指令如下:(首先需要激活本項目的虛拟環境)
pip install flask-migrate
           

使用

flask_migrate

必須借助

flask_scripts

,這個包的

MigrateCommand

中包含了所有和資料庫相關的指令。

2、準備工作

  • 在新的項目中建立一個

    config.py

    檔案,連接配接資料庫驅動。
  • 建立一個

    exts.py

    檔案:
# exts.py
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
           
  • 建立一個

    models.py

    檔案:
# models.py
from exts import db

# 建立映射表
class Article(db.Model):    #模型必須繼承db.Model
    #db.Column映射到表中字段,primary_key主鍵,autoincrement自增,nullable可為空(預設為True)
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key= True, autoincrement = True)
    title = db.Column(db.String(100),nullable = False)
    content = db.Column(db.Text, nullable = False)
           
  • 主app檔案

    flaskmigrate.py

# flaskmigrate.py
from flask import Flask
from exts import db
import config
from models import Article

app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)

@app.route('/')
def index():
	return 'hello Python'
if __name__=='__main__':
	app.run(debug=True)
           
  • manager.py

    檔案:
# manager.py
from flask_script import Manager
from flaskmigrate import app
from flask_migrate import Migrate,MigrateCommand
from exts import db
from models import Article

manager = Manager(app)

# 1.要使用flask_migrate,必須綁定app和db
migrate = Migrate(app,db)

# 2.把MigrateCommand指令添加到manager中
manager.add_command('db',MigrateCommand)

if __name__ == '__main__':
	manager.run()
           

注意: 一定不要忘記在

flaskmigrate.py

檔案中導入

Article

資料表模型類,

3、運作

調試需要在終端指令行進行。

在調試前,可以先觀察下,在該項目中不存在

migrations

這個檔案夾

下面開始運作

flask_migrate

相關的指令:(依次運作下面的三條指令)

  • python manage.py db init

    初始化一個遷移腳本的環境,隻需要執行一次,執行完該條魚具後,我們可以觀察到在該項目下被建立了一個

    migrations

    檔案夾,但是

    migrations/versions

    檔案夾下是空的。
  • python manage.py db migrate

    将模型生成遷移檔案,該條語句執行完後,會發現該項目下的

    migrations/versions

    檔案夾内有檔案了。在後期如果對模型進行了修改,就需要再執行一次這個指令。
  • python manage.py db upgrade

    最後添加将映射檔案真正的映射到資料庫中。此時檢視資料庫的中被建立了

    article

    這個表,且表中有已定義的幾個字段。在後期如果對模型進行了修改,就需要執行完上一個指令後,再執行一次這個指令。

注意: 在後期如果對模型進行了修改,就需要再一遍上面的第2-3條指令。,第一條指令無需再運作。

舉例:

如果我們對

models.py

檔案中的

Article

類進行了修改,比如添加了一個字段

tags

,如下:

# models.py
from exts import db

# 建立映射表
class Article(db.Model):    #模型必須繼承db.Model
    #db.Column映射到表中字段,primary_key主鍵,autoincrement自增,nullable可為空(預設為True)
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key= True, autoincrement = True)
    title = db.Column(db.String(100),nullable = False)
    content = db.Column(db.Text, nullable = False)
    tags = db.Column(db.String(100), nullable = False)
           

則隻需再在終端執行

python manage.py db migrate

python manage.py db upgrade

這兩條指令就可實作對

article

這個表的修改,即被添加了

tags

這個字段。

以上筆記整理自知了課堂黃勇老師講解的教學視訊《Flask架構入門到實戰開發》的第三章第12小節内容,不足之處,望不吝賜教!