前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >flask mysql 数据库增删改查(微信报修小程序源码讲解四)

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

原创
作者头像
热心的程序员
修改2020-03-26 14:38:14
1.6K0
修改2020-03-26 14:38:14
举报
文章被收录于专栏:编程之路编程之路

上一讲,我们学习了 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 并回复信息,我会为你解答 。祝你们心情愉快,天天进步。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • flask-sqlalchemy 是什么?他有什么特点 ?
  • 如何一步一步完成数据库增删改查操作呢 ?
  • 总结:
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档