第十屆鐵人賽 flask-restful DAY24-搞懂如何導入flask-SQLAlchemy

關於flask-SQLAlchemy

昨日的教程中教授如何將sqlite導入現有專案之中,但是直接使用sqlite有著諸多不便,所以今日教授大家flask-SQLAlchemy,藉由它可以讓我們存取資料庫更方便。

安裝flask-SQLAlchemy

不免俗的還是要教授大家如何安裝flask-SQLAlchemy,不過相信大家都不用看以下例子可以直接安裝了,不過有問題的還是新進的朋友們請參考以下例子:

$ pip install Flask-SQLAlchemy

導入flask-SQLAlchmey

在安裝完後就是要教授大家如何將flask-SQLAlchemy導入既有應用程式之中。其實flask-SQLAlchemy像先前導入的flask-marshmallow一樣,只是將SQLAlchemy封裝起來讓使用者好用而已,接下來就一個步驟一個步驟教授大家如何導入。

建立db.py

如同flask-marshmallow解決巡迴相依問題一般,這裡我們也先產生一個db實體放置flask-SQLAlchemy,相關內容如下:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

初始化flask-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,後續會說明原因,如此導入的工作就完成了。

介紹flask-SQLAlchemy

簡單的模型

這裡以我們的專案為例子來建立一個簡單的例子,請看下列程式碼:

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

這部分再介紹如何整合flask-SQLAlchemy與flask-marshmallow。

安裝相依函式庫

在整合兩個函式庫之前要先安裝介接兩個函式庫的函式庫,安裝的指令如下:

$ pip install marshmallow-sqlalchemy

修改Schematic

安裝完之後將Schema修改如下即可:

class UserSchema(ma.ModelSchema):
    class Meta:
        model = UserModel

小結

今日教程先介紹flask-SQLAlchemy如何安裝以及介紹其api如何使用,明日再介紹如何將其導入我們專案之中,敬請期待。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *