vlambda博客
学习文章列表

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

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

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

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

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

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

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

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

 
   
   
 
  1. # encoding: utf-8

  2. # dialect+driver://username:password@host:port/database

  3. DIALECT = 'mysql' # 要用是什么数据库,我使用的是 mysql

  4. DRIVER = 'pymysql' # 连接数据库驱动,pymysql 是 mysql 的驱动

  5. USERNAME = 'root' # 用户名 ,你的数据库用户名

  6. PASSWORD = 'Wjie2018' # 密码 ,你的数据库密码

  7. HOST = '127.0.0.1' # 服务器 ,数据库所在服务器的ip,本地即 127.0.0.1

  8. PORT = '3306' # 端口 ,数据库的默认端口 3306

  9. DATABASE = 'ideamerry_repair_v3' # 数据库名 ,你需要链接的具体数据库的名字 ,这里是报修数据库的名字


  10. SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT,

  11. DATABASE) # 拼接成数据库的 URI ,一般不需要修改

  12. SQLALCHEMY_TRACK_MODIFICATIONS = False # 用于追踪数据库修改 , 默认为True ,设置为 True 会增加内存消耗

2、创建数据库 db对象:在app.py 同级目录下创建 exts.py文件。使用 exts.py 的目的是方便在其他文件中使用 db 对象做数据操作。

 
   
   
 
  1. import os


  2. from flask_sqlalchemy import SQLAlchemy


  3. # 此时先不传入app

  4. db = SQLAlchemy()

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

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

 
   
   
 
  1. import config

  2. from exts import db

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

 
   
   
 
  1. app.config.from_object(config) # 加载数据库配置文件

  2. db.init_app(app) # 绑定到我们到应用程序

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

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

 
   
   
 
  1. # 注册user,使用前缀 user 作为前缀访问

  2. app.register_blueprint(user, url_prefix='/user')

4、创建数据库表的model映射 ,以数据库中 user 表为例 。创建model.py 文件 , 遵循 MVC 思想,我们将创建models目录,然后在models目录下创建 model.py 。 model 中为了映射数据库字段 ,首先要引入数据库 ,从之前我们创建好的exts中引入 db

 
   
   
 
  1. from exts import db

然后创建用户模型

 
   
   
 
  1. # 用户模型

  2. class User(db.Model):

  3. tableName = 'user'

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

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

  6. userPassword = db.Column(db.String(30), nullable=False)

  7. openid = db.Column(name='openid', nullable=False)

详细解释上面代码: 第一行表示创建 class 的名字是 User ,参数是数据库model

 
   
   
 
  1. class User(db.Model):

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

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

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

 
   
   
 
  1. class User(db.Model):

  2. __tableName__ = 'sys_user'

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

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

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

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

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

或写为下面形式

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

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

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

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

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

 
   
   
 
  1. user = User(userName='admin', userPassword='123456')

  2. db.session.add(user)

  3. db.session.commit()

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

 
   
   
 
  1. resultUser = User.query.filter(User.id == 1).first()

  2. db.session.delete(resultUser)

  3. db.session.commit()

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

 
   
   
 
  1. dbUser = User.query.filter(User.id == 1).first() # 先根据 id 查出数据库的一条数据

  2. dbUser.userName='study2100' # 修改用户名admin 为 study2100

  3. db.session.commit() # 提交数据库

查:分页查询用户表数据

 
   
   
 
  1. users = User.query.paginate(1, per_page=10) # 分页查询第一页数据,本页查询10条

  2. users = User.query.order_by(User.id.desc()).paginate(page, per_page=10) # order_by 是排序,按照 id 倒叙排列查询

总结:

flask 中数据库的操作并不复杂 , 只要我们按照这样的步骤去做 ,注意细节 ,增删改查操作就可以很快的完成 ,学会了数据库基本操作 , 无论是为小程序端提供 api 接口,还是后台管理功能就能很顺利的完成 。