昨日的教程中教授如何將sqlite導入現有專案之中,但是直接使用sqlite有著諸多不便,所以今日教授大家flask-SQLAlchemy,藉由它可以讓我們存取資料庫更方便。
本文同步放置於此
不免俗的還是要教授大家如何安裝flask-SQLAlchemy,不過相信大家都不用看以下例子可以直接安裝了,不過有問題的還是新進的朋友們請參考以下例子:
$ pip install Flask-SQLAlchemy
在安裝完後就是要教授大家如何將flask-SQLAlchemy導入既有應用程式之中。其實flask-SQLAlchemy像先前導入的flask-marshmallow一樣,只是將SQLAlchemy封裝起來讓使用者好用而已,接下來就一個步驟一個步驟教授大家如何導入。
如同flask-marshmallow解決巡迴相依問題一般,這裡我們也先產生一個db實體放置flask-SQLAlchemy,相關內容如下:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
產生實體後在app.py需要初始化flask-SQLAlchemy,相關內容如下:
from common.db import db
from common.ma import ma
db.init_app(app)
ma.init_app(app)
這裡要注意先初始化flask-SQLAlchemy在初始化flask-marshmallow,後續會說明原因,如此導入的工作就完成了。
這裡以我們的專案為例子來建立一個簡單的例子,請看下列程式碼:
class UserModel(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(120))
def __init__(self, name, email, password):
self.name = name
self.email = email
self.password = password
如此就建立了一個UserModel可以直接對應到DB的結構。
def save_to_db(self):
db.session.add(self)
db.session.commit()
透過db.session.add(self)可以將資料加入產生新增資料的SQL語法,再來透過db.session.commit()可以執行指令,因此就可以將使用者資料儲存到資料庫內。
def delete(self):
db.session.delete(self)
db.session.commit()
如同add指令一般,執行db.session.delete(self)可以產生SQL語法,再來透過db.session.commit()可以執行指令,最後就可以將該筆資料由資料庫中刪除。
def find_by_name(cls, name):
return cls.filter_by(name == name).first()
透過filter_by可以執行查詢的指令,透過first可以取的第一筆資料,如此就可以透過此函數找到對應name的使用者資料。
這部分比較難說明,就是先更新Model的參數後下一個commit的指令即可,請先看以下例子:
def update(self):
db.session.commit()
user = UserModel.find_by_name('kirai')
user.email = 'ab.cd@gmail.com'
user.password = '456789'
user.update()
當UserModel在執行db.session.commit()時他會將目前UserModel內的使用者資料更新到資料庫內。
這部分再介紹如何整合flask-SQLAlchemy與flask-marshmallow。
在整合兩個函式庫之前要先安裝介接兩個函式庫的函式庫,安裝的指令如下:
$ pip install marshmallow-sqlalchemy
安裝完之後將Schema修改如下即可:
class UserSchema(ma.ModelSchema):
class Meta:
model = UserModel
今日教程先介紹flask-SQLAlchemy如何安裝以及介紹其api如何使用,明日再介紹如何將其導入我們專案之中,敬請期待。