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.先建立遷移資料夾、該命令只需執行一次即可
#執行後會生成`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 | 設定預設值 |