Flask高階應用05---模型和資料遷移
新建專案做好基礎配置
一、Flask模型簡介
Flask預設並沒有提供任何資料庫操作的API
我們可以選擇任何適合自己專案的資料庫來使用
Flask中可以自己的選擇資料,用原生語句實現功能,也可以選擇ORM(SQLAlchemy,MongoEngine)
SQLAlchemy是一個很強大的關係型資料庫框架,支援多種資料庫後臺。SQLAlchemy提供了高層ORM,也提供了使用資料庫原生SQL的低層功能。
ORM:
將對物件的操作轉換為原生SQL
優點
易用性,可以有效減少重複SQL
效能損耗少
設計靈活,可以輕鬆實現複雜查詢
移植性好
針對於Flask的支援,
pip install flask-sqlalchemy
安裝驅動
pip install pymysql
二、定義模型
使用SQLALchemy的物件去建立欄位
其中__tablename__指定建立的資料庫的名稱
建立models.py檔案,其中定義模型 from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Student(db.Model): id = db.Column(db.Integer,primary_key=True,autoincrement=True) s_name = db.Column(db.String(10),unique=False,nullable=False) s_age = db.Column(db.Integer,default=19) __tablename__ = 'student'
2.欄位型別
Integer表示建立的s_id欄位的型別為整形,
primary_key表示是否為主鍵
String表示該欄位為字串
unique表示該欄位唯一
default表示預設值
autoincrement表示是否自增
3.別名:
__tablename__ = 'student'
三、關聯資料庫
在manage.py中新增資料庫配置,
1.初始化SQLALchemy
在定義的__init__.py檔案中使用SQLALchemy去整合一個或多個Flask的應用
有兩種方式:
第一種: from flask_sqlalchemy import SQLALchemy app = Flask(__name__) db = SQLAlchemy(app) 第二種: from App.models import db def create_app(): app = Flask(__name__) db.init_app(app) return app
2.配置資料庫的訪問地址
資料庫連線的格式:
dialect+driver://username:[email protected]:port/database
dialect資料庫實現
driver資料庫的驅動
【例】: 訪問mysql資料庫,驅動為pymysql,使用者為root,密碼為123456,資料庫的地址為本地,埠為3306,資料庫名稱HelloFlask
設定如下: “mysql+pymysql://root:[email protected]:3306/HelloFlask”
在初始化__init__.py檔案中如下配置:
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:[email protected]:3306/HelloFlask"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
【例】
# 資料庫的配置
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]:3306/flask5' #使用者名稱root,密碼123456,表名flask5
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
#初始化資料庫
db.init_app(app)
注意:在遷移前首先要開啟資料庫mysql
3.建立模型==create_all()
對建立的模型資料進行遷移,這個方法只能用於首次建立,後面遷移需要用migrate(不建議用),建議用sql語句,orm實現的資料庫遷移不是最優方式
@blue.route('create_db/') #設定路由資訊
def create_db():
db.create_all() #呼叫flask方法
return '建立成功'
執行專案,瀏覽器中顯示建立成功後,檢視資料庫可以看到此時生成剛建立的學生表
mysql> show tables;
+------------------+
| Tables_in_flask5 |
+------------------+
| student |
四、資料庫的migrate遷移(不推薦)
在django中繼承了makemigrations,可以通過migrate操作去更新資料庫,修改我們定義的models,然後在將模型對映到資料庫中。
在flask中也有migrate操作,它能跟蹤模型的變化,並將變化對映到資料庫中
1、安裝migrate
pip install flask-migrate
2、 配置使用migrate
(1)初始化,使用app和db進行migrate物件的初始化
from flask_migrate import Migrate
#繫結app和資料庫
Migrate(app=app, db=db)
(2) 安裝了flask-script的話,可以在Manager()物件上新增遷移指令
from flask_migrate import Migrate, MigrateCommand
app = Flask(__name__)
manage = Manager(app=app)
manage.add_command('db', MigrateCommand)
操作:
python manage.py db init 初始化出migrations的檔案,只調用一次
python manage.py db migrate 生成遷移檔案
python manage.py db upgrade 執行遷移檔案中的升級
python manage.py db downgrade 執行遷移檔案中的降級
python manage.py db --help 幫助文件