当前位置: 首页 > news >正文

android 增删改查 源码_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 。

6525d4123efc56c8e35232af2c8ba52b.png

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

相关文章:

  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • 如何把项目改成微服务项目_微服务项目搭建,到底要不要聚合工程?
  • cmd python封装成exe_将python代码打包成exe文件——pyinstaller模块用法
  • js不用reverse反转数组代码_反转数组而不使用Array.Reverse()
  • jsch设置代理_Springboot2(20)轻松搞定WebSocket
  • adb 输入回车命令_adb 常用命令
  • matlab向量与x正方向的夹角_高中数学:向量在几何中的应用
  • 怎么判断几行_孩子没有天赋怎么办?小陶虹的回答我点100个赞
  • 执行时间单位_排污许可申报之后环境管理台账及执行报告,你准备好了吗?
  • 人体一机竞技格斗机器人_2019中国智能机器人大赛在青岛举行
  • cad lisp 界址点号_CAD图纸多到打不完?没关系学会批量打印来多少都不怕
  • mysql 动态传入表名 存储过程_MySQL存储过程了解
  • zbbz 坐标标注lisp_CAD中还能这样快速标注尺寸?怪不得同事天天准时下班
  • zoom怎么解除静音_进入Zoom视频会议时为什么没有声音
  • rm删除级联目录的参数是_Linux:绝对路径和相对路径,cd 命令,rm 命令,history 命令详解...
  • create-react-app项目添加less配置
  • es6要点
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java到底能干嘛?
  • java第三方包学习之lombok
  • LintCode 31. partitionArray 数组划分
  • linux学习笔记
  • oldjun 检测网站的经验
  • PhantomJS 安装
  • php ci框架整合银盛支付
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Vue.js 移动端适配之 vw 解决方案
  • webpack4 一点通
  • 包装类对象
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 基于组件的设计工作流与界面抽象
  • 前端自动化解决方案
  • 使用Swoole加速Laravel(正式环境中)
  • 试着探索高并发下的系统架构面貌
  • 物联网链路协议
  • FaaS 的简单实践
  • 阿里云移动端播放器高级功能介绍
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 组复制官方翻译九、Group Replication Technical Details
  • ​一些不规范的GTID使用场景
  • "无招胜有招"nbsp;史上最全的互…
  • $forceUpdate()函数
  • (1)(1.9) MSP (version 4.2)
  • (3)STL算法之搜索
  • (第二周)效能测试
  • (转)程序员技术练级攻略
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .gitignore文件---让git自动忽略指定文件
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [100天算法】-x 的平方根(day 61)
  • [20150321]索引空块的问题.txt
  • [3300万人的聊天室] 作为产品的上游公司该如何?