1. 程式人生 > >Flask高階應用05---模型和資料遷移

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 幫助文件