flask mysql 數據庫增刪改查(微信報修小程序源碼講解四)

上一講,我們學習了 flask 攔截器與session的使用 ,已經清楚了後臺用戶是否登錄的判斷及驗證 url 合法性的方法 。

本文我們講解數據庫的增刪改查操作 , 每一個應用系統都離不開數據的交互 , 數據庫的操作是必須掌握的技能 。flask 中使用 flask-sqlalchemy 操作數據庫將非常容易 ,我們一起學習一下 。

flask-sqlalchemy 是什麼?他有什麼特點 ?

flask-sqlalchemy 是一套 flask 的數據庫操作框架 。

他的特點是:能夠快速的完成數據庫的增刪改查操作 , 同時還具有的分頁查詢的功能 ,我們不需要寫具體數據庫 sql 語句就可完成不同的數據庫操作 。

如何一步一步完成數據庫增刪改查操作呢 ?

1、 創建數據庫配置文件,在app.py 同級目錄下創建 config.py , 通常我們將數據庫的配置寫到單獨的文件 , 方便數據庫配置的修改 。這裏我們使用的是 mysql ,每一行配置的作用,我均註釋在代碼後面,配置如下:

# encoding: utf-8
# dialect+driver://username:password@host:port/database
DIALECT = 'mysql'  # 要用是什麼數據庫,我使用的是 mysql 
DRIVER = 'pymysql'  # 連接數據庫驅動,pymysql 是 mysql 的驅動 
USERNAME = 'root'  # 用戶名 ,你的數據庫用戶名
PASSWORD = 'Wjie2018'  # 密碼 ,你的數據庫密碼
HOST = '127.0.0.1'  # 服務器 ,數據庫所在服務器的ip,本地即 127.0.0.1 
PORT = '3306'  # 端口 ,數據庫的默認端口 3306 
DATABASE = 'ideamerry_repair_v3'  # 數據庫名 ,你需要鏈接的具體數據庫的名字 ,這裏是報修數據庫的名字 

SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT,
                                                                       DATABASE)  # 拼接成數據庫的 URI ,一般不需要修改 
SQLALCHEMY_TRACK_MODIFICATIONS = False  # 用於追蹤數據庫修改 , 默認爲True ,設置爲 True 會增加內存消耗 

2、創建數據庫 db對象:在app.py 同級目錄下創建 exts.py文件。
使用 exts.py 的目的是方便在其他文件中使用 db 對象做數據操作。

import os

from flask_sqlalchemy import SQLAlchemy

# 此時先不傳入app
db = SQLAlchemy()

3、初始化數據庫,我們在啓動程序即:app.py 中引入exts.py 和config.py 然後執行數據庫初始化操作 。

下面兩行代碼作用是:導入兩個文件

import config
from exts import db

下面兩行代碼作用是:初始化數據庫

app.config.from_object(config) # 加載數據庫配置文件
db.init_app(app) # 綁定到我們到應用程序

注意:這兩行代碼比如放在有數據庫操作的藍圖的上面 , 因爲藍圖中要使用數據庫操作,必須先初始化 ,如果將數據庫操作的藍圖放在這兩行的上面,就是數據庫爲初始化不能使用。

藍圖是什麼?我們後面講解。下面這行就是註冊一個藍圖 user ,因 user 中有數據庫操作,所以下面這行這行必須位於 數據庫初始化代碼的下面,切記!

# 註冊user,使用前綴 user 作爲前綴訪問
app.register_blueprint(user, url_prefix='/user')

4、創建數據庫表的model映射 ,以數據庫中 user 表爲例 。創建model.py 文件 , 遵循 MVC 思想,我們將創建models目錄,然後在models目錄下創建 model.py 。
在這裏插入圖片描述
model 中爲了映射數據庫字段 ,首先要引入數據庫 ,從之前我們創建好的exts中引入 db

from exts import db

然後創建用戶模型

# 用戶模型
class User(db.Model):
    tableName = 'user'
    id = db.Column(db.INTEGER, primary_key=True, autoincrement=True)
    userName = db.Column(db.String(30), nullable=False)
    userPassword = db.Column(db.String(30), nullable=False)
    openid = db.Column(name='openid', nullable=False)

詳細解釋上面代碼:
第一行表示創建 class 的名字是 User ,參數是數據庫model

class User(db.Model):

第二行是數據表的名字,默認情況下 User 類對應數據庫中的 user表 ,即將大寫字母轉換爲小寫字母的表明。

多個大寫字母的 class 類默認會映射數據的表是什麼呢 ? 比如 class 的名字是 RepairServiceSheet ,他默認映射的數據庫表則是數據庫中的 :repair_service_sheet 表。

若不想使用默認的映射呢 ?我們可以覆蓋默認的映射 ,使用 __tablename__來覆蓋即可 ,如:你的 User 類要對應數據庫中的 sys_user 表,則使用一下代碼 :

class User(db.Model):
    __tableName__ = 'sys_user'

第三行及以下是具體字段的映射

class 類的 id 映射數據庫表 user 的 id 字段,並且是主鍵自增長 ,primary_key=True, autoincrement=True

    id = db.Column(db.INTEGER, primary_key=True, autoincrement=True)

class 類的 userName 映射數據表的 userName 字段 , 名字必須一模一樣,大小寫一致 。

    userName = db.Column(db.String(30), nullable=False)

或寫爲下面形式

    userName = db.Column(name='userName', nullable=False)

如果你不想在 class User 裏使用 userName 做爲名字 ,則可寫爲下面形式 :

    anyUserName = db.Column(name='userName', nullable=False)

5、增刪改查操作,完成了以上配置 ,數據庫操作就非常簡單了 ,下面依次看一下。(可參照源代碼的controllor/user/user.py中的代碼)

增:向用戶表添加一條數據

    user = User(userName='admin', userPassword='123456')
    db.session.add(user) 
    db.session.commit()

刪:刪除用戶表中的一條數據

 resultUser = User.query.filter(User.id == 1).first()
    db.session.delete(resultUser)
    db.session.commit()

改:修改用戶表的一條數據 ,先查詢出需要修改的記錄再做修改提交

    dbUser = User.query.filter(User.id == 1).first() # 先根據 id 查出數據庫的一條數據
    dbUser.userName='study2100' # 修改用戶名admin  爲 study2100
    db.session.commit()  # 提交數據庫

查:分頁查詢用戶表數據

    users = User.query.paginate(1, per_page=10) # 分頁查詢第一頁數據,本頁查詢10條
    users = User.query.order_by(User.id.desc()).paginate(page, per_page=10) # order_by 是排序,按照 id 倒敘排列查詢 

總結:

flask 中數據庫的操作並不複雜 , 只要我們按照這樣的步驟去做 ,注意細節 ,增刪改查操作就可以很快的完成 ,學會了數據庫基本操作 , 無論是爲小程序端提供 api 接口,還是後臺管理功能就能很順利的完成 。

如你有任何問題 ,請關注我個人公衆號 JeenWang 並回覆信息,我會爲你解答 。祝你們心情愉快,天天進步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章