13、flask-模型-models-模型配置使用-資料遷移

little小新發表於2024-07-26

1.配置資料庫

__init__.py

#__init__.py: 初始化檔案、用來建立flask應用


from flask import Flask
from .views import blue     #藍圖
from .exts import init_exts  #匯入外掛模組 exts.py


def create_app():
    app = Flask(__name__)   #建立flask應用

    #註冊藍圖
    app.register_blueprint(blueprint=blue)

    # 配置資料庫
    db_uri = 'sqlite:///sqlite3.db' #資料庫路徑,自動會建立資料庫檔案sqlite3.db
    app.config['SQLALCHEMY_DATABASE_URI'] = db_uri  #配置資料庫連線的路徑
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False    #關閉追蹤資料庫的修改

    # 初始化外掛 exts.py
    init_exts(app=app)

    return app

2.配置第三方外掛

App目錄下建立exts.py檔案

# exts.py :外掛管理
# 擴充套件的第三方外掛

# 1. 匯入
from flask_sqlalchemy import SQLAlchemy #做ORM關係的對映
from flask_migrate import Migrate   #做資料遷移

#2. 初始化外掛
db = SQLAlchemy()   #ORM
migrate = Migrate() #資料遷移

# 3.和app物件繫結
def init_exts(app):
    db.init_app(app)
    migrate.init_app(app,db)

3.模型models.py

# 模型資料庫

from .exts import db    #匯入db物件

# 模型     對應資料庫中的     資料庫
# 類                       表結構
# 類屬性                    表欄位
# 物件                      表的一行資料



# 模型: 類名
# 必須繼承:db.Model  才是 一個模型
class User(db.Model):
    # 表名
    __tablename__ = 'tb_user'
    # 欄位
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50), unique=True, index=True)
    age = db.Column(db.Integer, default=1)
    sex = db.Column(db.Boolean, default=True)
    salary = db.Column(db.Float, default=10000, nullable=False)

# db.Column :表示欄位
# db.Integer :表示欄位的型別 整數型別
# primary_key=true : 表示主鍵
# autoincrement=true : 表示自增
# db.String(50) : 表示欄位的長度 相當於varchar(50)
# index=True : 表示建立索引
# db.Boolean : 表示布林型別
# default=1 : 表示預設值
# db.Float : 表示浮點型別
# nullable=False : 表示不能為空
  • 模型建立好後就要執行資料遷移

注意

要確保已安裝:Flask-Migrate
確保已在__init__.py中配置好資料庫
在views.py中匯入models模組:from .models import *
要在專案的根目錄下

  1. 執行以下命令:
#1.先建立遷移資料夾、該命令只需執行一次即可
#執行後會生成`instance`和migrations 兩個目錄
$ flask db init

#2. 生成遷移檔案
# 會去找繼承 db.Model 的類,執行類中的內容
# 如果不是繼承 db.Model 的話就無法執行生成遷移檔案
# 會在 instance 下生成 sqlite3.db 資料庫檔案(在__init__.py中配置資料庫時定義的變數名)
# 會在 migrations/versions 下生成xxxx.py 遷移檔案
$ flask db migrate

#3.執行遷移檔案中的升級
# 將資料結構變為最新的遷移檔案 xxxx.py 中的語句執行 建立表的操作
$ flask db upgrade


#4.執行遷移檔案中的降級(沒必要不需要執行)
# 撤銷上一步的升級 - 就是回退到上一個遷移檔案(xxx.py)中的資料結構
flask db downgrade
  • 注意:如果models.py中模型變化了(如新增欄位貨表結構修改),都需要重新做資料遷移-第2步,和資料升級-第3步-(flask db init 不需要再執行)

模型的欄位型別

欄位型別 中文名稱備註 說明
Integer 整數 儲存整數值
String 字串 儲存定長字串
Text 文字 儲存可變長度的文字
Date 日期 儲存日期值(不含時間)
DateTime 日期時間 儲存日期和時間值
Boolean 布林值 儲存True或False值
Float 浮點數 儲存浮點數值
Numeric 數值 儲存精確的十進位制數值,常用於貨幣金額
Time 時間 儲存時間值(不含日期)
Enum 列舉 儲存一組預定義值
LargeBinary 大型二進位制 儲存二進位制資料,例如檔案和圖片
Interval 時間間隔 儲存時間間隔
JSON JSON 儲存JSON格式的資料
UUID UUID 儲存全域性唯一識別符號
ARRAY 陣列 儲存一個資料型別的陣列

常用約束

選項名 說明
primary_key 如果設定為True,這就是表的主鍵
unique 為True、表示唯一值
index 為True、表示為這一列建立索引、提升查詢效率
nullable 為True、表示允許這一列可以為空值、False則不為空值
default 設定預設值

相關文章