flask mysql 数据库增删改查(微信报修小程序源码讲解四)

2020-03-26 14:38:14 浏览数 (1)

上一讲,我们学习了 flask 拦截器与session的使用 ,已经清楚了后台用户是否登录的判断及验证 url 合法性的方法 。

本文我们讲解数据库的增删改查操作 , 每一个应用系统都离不开数据的交互 , 数据库的操作是必须掌握的技能 。flask 中使用 flask-sqlalchemy 操作数据库将非常容易 ,我们一起学习一下 。

flask-sqlalchemy 是什么?他有什么特点 ?

flask-sqlalchemy 是一套 flask 的数据库操作框架 。

他的特点是:能够快速的完成数据库的增删改查操作 , 同时还具有的分页查询的功能 ,我们不需要写具体数据库 sql 语句就可完成不同的数据库操作 。

如何一步一步完成数据库增删改查操作呢 ?

1、 创建数据库配置文件,在app.py 同级目录下创建 config.py , 通常我们将数据库的配置写到单独的文件 , 方便数据库配置的修改 。这里我们使用的是 mysql ,每一行配置的作用,我均注释在代码后面,配置如下:

代码语言:txt复制
# 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 对象做数据操作。

代码语言:txt复制
import os

from flask_sqlalchemy import SQLAlchemy

# 此时先不传入app
db = SQLAlchemy()

3、初始化数据库,我们在启动程序即:app.py 中引入exts.py 和config.py 然后执行数据库初始化操作 。

下面两行代码作用是:导入两个文件

代码语言:txt复制
import config
from exts import db

下面两行代码作用是:初始化数据库

代码语言:txt复制
app.config.from_object(config) # 加载数据库配置文件
db.init_app(app) # 绑定到我们到应用程序

注意:这两行代码比如放在有数据库操作的蓝图的上面 , 因为蓝图中要使用数据库操作,必须先初始化 ,如果将数据库操作的蓝图放在这两行的上面,就是数据库为初始化不能使用。

蓝图是什么?我们后面讲解。下面这行就是注册一个蓝图 user ,因 user 中有数据库操作,所以下面这行这行必须位于 数据库初始化代码的下面,切记!

代码语言:txt复制
# 注册user,使用前缀 user 作为前缀访问
app.register_blueprint(user, url_prefix='/user')

4、创建数据库表的model映射 ,以数据库中 user 表为例 。创建model.py 文件 , 遵循 MVC 思想,我们将创建models目录,然后在models目录下创建 model.py 。

在这里插入图片描述在这里插入图片描述

model 中为了映射数据库字段 ,首先要引入数据库 ,从之前我们创建好的exts中引入 db

代码语言:txt复制
from exts import db

然后创建用户模型

代码语言:txt复制
# 用户模型
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

代码语言:txt复制
class User(db.Model):

第二行是数据表的名字,默认情况下 User 类对应数据库中的 user表 ,即将大写字母转换为小写字母的表明。

多个大写字母的 class 类默认会映射数据的表是什么呢 ? 比如 class 的名字是 RepairServiceSheet ,他默认映射的数据库表则是数据库中的 :repair_service_sheet 表。

若不想使用默认的映射呢 ?我们可以覆盖默认的映射 ,使用 tablename来覆盖即可 ,如:你的 User 类要对应数据库中的 sys_user 表,则使用一下代码 :

代码语言:txt复制
class User(db.Model):
    __tableName__ = 'sys_user'

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

class 类的 id 映射数据库表 user 的 id 字段,并且是主键自增长 ,primary_key=True, autoincrement=True

代码语言:txt复制
    id = db.Column(db.INTEGER, primary_key=True, autoincrement=True)

class 类的 userName 映射数据表的 userName 字段 , 名字必须一模一样,大小写一致 。

代码语言:txt复制
    userName = db.Column(db.String(30), nullable=False)

或写为下面形式

代码语言:txt复制
    userName = db.Column(name='userName', nullable=False)

如果你不想在 class User 里使用 userName 做为名字 ,则可写为下面形式 :

代码语言:txt复制
    anyUserName = db.Column(name='userName', nullable=False)

5、增删改查操作,完成了以上配置 ,数据库操作就非常简单了 ,下面依次看一下。(可参照源代码的controllor/user/user.py中的代码)

增:向用户表添加一条数据

代码语言:txt复制
    user = User(userName='admin', userPassword='123456')
    db.session.add(user) 
    db.session.commit()

删:删除用户表中的一条数据

代码语言:txt复制
 resultUser = User.query.filter(User.id == 1).first()
    db.session.delete(resultUser)
    db.session.commit()

改:修改用户表的一条数据 ,先查询出需要修改的记录再做修改提交

代码语言:txt复制
    dbUser = User.query.filter(User.id == 1).first() # 先根据 id 查出数据库的一条数据
    dbUser.userName='study2100' # 修改用户名admin  为 study2100
    db.session.commit()  # 提交数据库

查:分页查询用户表数据

代码语言:txt复制
    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 并回复信息,我会为你解答 。祝你们心情愉快,天天进步。

0 人点赞