14、flask-模型-models-表的操作-增删改查

news/2024/9/8 10:33:23/文章来源:https://www.cnblogs.com/littlecc/p/18326488

1.单表操作

1.修改表结构

接着上一步的数据迁移后、生成了表,接下来就要对表的操作

这里稍微对表结构改了一下
models.py

from .exts import db    #导入db对象class User(db.Model):# 表名__tablename__ = 'user'# 字段id = db.Column(db.Integer, primary_key=True, autoincrement=True)name = db.Column(db.String(50), unique=True)age = db.Column(db.Integer, default=1)

注意:修改表结构需要重新做数据迁移的操作:

1.flask db migrate
2.flask db upgrade

2.增加数据

from flask import Blueprint
from .models import *#创建蓝图(路由)
blue = Blueprint('user', __name__)@blue.route('/')
def index():return 'index'# 创建对象: 对象名(自定义) = 类名()     -- > 该对象指的是models中的类
# 对象.属性名 = 表字段的值# 单表操作 - 增删改查
# 1.增
@blue.route('/useradd/')
def user_add():# #添加一条数据# # 创建对象# user = User()# user.name = '张三'# user.age = 18# db.session.add(user)    #将对象user添加到session中# db.session.commit()     #将session中的数据提交到数据库中#添加多条数据users = []for i in range(10, 30):user = User()user.name = '张' + str(i)user.age = iusers.append(user)try:db.session.add_all(users)    #将对象user添加到session中, all添加多个对象db.session.commit()     #将session中的数据提交到数据库中  事务提交except Exception as e:db.session.rollback()   #回滚db.session.flush()  #清空sessionreturn '添加失败' + str(e)#因为这里name是唯一值、所以如果重复添加会报错,将错误打印出来# 添加失败(sqlite3.IntegrityError) UNIQUE constraint failed: user.name [SQL: INSERT INTO user (name, age) VALUES (?, ?) RETURNING id] [parameters: ('张10', 10)] (Background on this error at: https://sqlalche.me/e/20/gkpj)return '添加成功'

3.删除数据

from flask import Blueprint
from .models import *#创建蓝图(路由)
blue = Blueprint('user', __name__)@blue.route('/')
def index():return 'index'# 创建对象: 对象名(自定义) = 类名()     -- > 该对象指的是models中的类
# 对象.属性名 = 表字段的值# 2.删
# 先查到要删除的数据,再执行删除
@blue.route('/userdel/')
def user_del():# 先查到要删除的数据user = User.query.first()   #查询第一条数据db.session.delete(user)db.session.commit()return '删除成功'

3.改

# 3.改
@blue.route('/userupdate/')
def user_update():# 先查到要修改的数据user = User.query.first()user.age = 200db.session.commit()return '修改成功'

4.查询

  • 查询数据常用属性
  1. 过滤器
方法名 说明
filter() 把过滤器添加到原查询上,返回一个新的查询
filter_by() 把等值过滤器添加到原查询上,返回一个新查询
limit() 使用指定的值限制原查询返回的结果数量,返回一个新查询
offset() 偏移原查询返回的结果、返回一个新的查询
order_by() 根据指定条件对原查询结果进行排序、默认升序、降序需要导入from sqlalchemy import desc
group_by() 根据指定条件对原查询结果进行分组
  1. 常用查询
方法名 说明
all() 以列表形式返回查询的所有结果、返回列表
first() 返回查询的第一个结果、如果没有结果返回 None
first_or_404() 返回查询的第一个结果、如果没有结果、则终止请求、返回404错误响应
get() 返回指定主键对应的行、如果没有对应的行、则返回None
get_or_404() 返回指定主键对应的行、如果没有找到指定的主键、则终止请求、返回404错误响应
count() 返回查询结果的数量
paginate() 返回一个Paginate对象、他包含指定范围内的结果 - 一般做翻页
  1. 查询属性
属性名 说明
contains() 模糊查询
startswith() 查询以什么开头的
endswitch() 查询以什么结尾的
in_ 查找在列表中的数据
__gt__ 大于
__ge__ 大于等于
__lt__ 小于
__le__ 小于等于
  1. 逻辑运算

需要导入:from sqlalchemy import and_, or_, not_

  • 与 and_ :filter(and_(条件),条件...)
  • 或 or_ : filter(or_(条件),条件...)
  • 非 not_ : filter(not_(条件),条件)

案例如下:

```plaintext
from flask import Blueprint
from sqlalchemy import desc, and_, or_, not_from .models import *#创建蓝图(路由)
blue = Blueprint('user', __name__)@blue.route('/')
def index():return 'index'# 创建对象: 对象名(自定义) = 类名()     -- > 该对象指的是models中的类
# 对象.属性名 = 表字段的值# 4.查
@blue.route('/userget/')
def user_get():# all(): 查询所有数据users = User.query.all()    #查询所有数据# print(users)    #打印的是对象、如果models中有__repr__方法,打印的是对象的属性值、如果没有__repr__方法,打印的是对象的内存地址# print(User.query)   #打印的是sql语句# filter(): 过滤, 过滤条件,类似where 、支持链式查询、得到的是查询集users = User.query.filter()# print(users)# get(): 根据主键查询、如果没有找到,返回None、user = User.query.get(10)# print(user)# print(user.name, user.age)  # 打印对象的属性值# filter()与filter_by()的区别# filter()  # 类似where、支持不等值的条件查询、但条件要:对象.属性名# filter_by()   #用于等值 = 操作的过滤条件,而不支持 > < 等不等值的条件查询# users = User.query.filter(User.age==18)   ##users = User.query.filter(User.age>18)     #返回的是查询集users = User.query.filter_by(age=18)        #可以直接属性值查询# users = User.query.filter_by(age>18)      #这是不支持的所以会报错# print(list(users))  # 打印查询集使用list()强转打印# first(): 查询第一条数据# last(): 查询最后一条数据user = User.query.first()# user = User.query.last()user = User.query.first_or_404()print(user.name, user.age)# count(): 查询数据条数count = User.query.count()print(count)# limit(): 查询指定条数# offset(): 查询指定条数,从指定位置开始users = User.query.offset(3).limit(4)print(list(users))# order_by(): 排序users = User.query.order_by('age')  # 升序users = User.query.order_by(desc('age'))  # 降序  需要导入 from sqlalchemy import descprint(list(users))# 逻辑运算 and_ , or_ , not_users = User.query.filter(User.age>20, User.age<30) # 且运算users = User.query.filter(and_(User.age>20, User.age<30))users = User.query.filter(or_(User.age>20, User.age<30))users = User.query.filter(not_(User.age>20))print(list(users))# 查询属性users = User.query.filter(User.name.contains('张'))  # 模糊查询 类似 like# in_() : 查询属性users = User.query.filter(User.name.in_(['张三', '李四']))  # 查找在列表中的数据# startswith(): 查询以什么开头的数据users = User.query.filter(User.name.startswith('张'))# endswith(): 查询以什么结尾的数据users = User.query.filter(User.name.endswith('三'))# __gt__: 大于# __lt__: 小于# __ge__: 大于等于# __le__: 小于等于users = User.query.filter(User.age.__gt__(20))users = User.query.filter(User.age.__ge__(20))users = User.query.filter(User.age.__le__(20))print(list(users))return '查询成功'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/772614.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习Java的第四周

第四周的学习记录来喽,本周的重点就是之前提到过的判断和循环(其中包括流程控制语句的三种结构:顺序、分支、循环;顺序结构即Java程序的默认流程,分支结构学了if判断语句的三种格式、switch语句练习和扩展知识,循环结构学了for循环格式和练习、累加思想和统计思想、while…

idea在pom中引入第三方依赖

项目右侧点击maven,点击加号(鼠标放上去会出现add maven project字样) 找到要导入的项目的pom文件选中,ok(这里我以及导入过了,所以ok是灰色) 回到原项目中,在pom中添加dependency 其中,artifactId是导入进来的姓名的名字,groupId是导入进来的项目的java目录下的包名…

计算机组成与体系结构-cache

概念 Cache,高速缓冲存储器。是解决CPU与主存之间速度不匹配而采用的一项重要技术,位于主存与CPU之间,由静态存储芯片(SRAM)组成,容量比较小,Cache存储了频繁访问的内存数据命中率 CPU欲访问的信息已在Cache中的比率,设在一段程序执行期间cache完成存取次数为NC,主存完成…

《Programming from the Ground Up》阅读笔记:p88-p94

《Programming from the Ground Up》学习第5天,p88-p94总结,总计7页。 一、技术总结 1.touppercase.s #PURPOSE: This program converts an input file #to an output file with all letters #converted to uppercase.#PROCESSING: #(1)Open the input file #(2)Open the o…

计算机网络第三讲 数据链路层

计算机网络第三讲 数据链路层 第一节:数据链路层功能 1. 概述2. 数据链路层的功能封装成帧透明传输差错控制实现无比特差错 不是可靠传输 丢失,乱序,重复无法解决

计算机组成与体系结构-层次化存储体系

将数据分为多个层次进行存储,以最优的控制调度算法和合理的成本,构成具有性能可接受的存储系统. 解决两个矛盾采用层次化存储体系,可以通过平衡存储介质的速度和成本得到最佳的存储效用。解决了主存容量不足与高成本的矛盾、CPU与主存速度不匹配的矛盾存储器分类RAM,随机存…

计算机网络第一讲

计算机网络第一讲 计算机网络概述考点一 1. 计算机网络的定义2. 计算机网络的组成物理组成工作方式英特网中的服务 考研中只有 TCP是可靠服务,其他都是不可靠的 面向连接的服务只有1.TCP 2.PPP 其他所有均无连接有应答服务:1.TCP 2.CSMA/CA3. 计算机网络的特点 共享4. 计算机…

计算机组成原理基础第7讲 输入输出系统

计算机组成原理基础第7讲 输入输出系统2. 输入输出系统的组成考点二:I/O接口接口的功能和组成I/O接口的基本组成3. 接口类型4. 程序查询方式考点三:中断系统

ABC273F Hammer 题解

dp的本质是拓扑(),感觉可以套一个线段树优化建图搞到 nlogn,好喔ABC273F Hammer 题解 题目大意 数轴上有 \(n\) 个锤子和 \(n\) 堵墙,第 \(i\) 个锤子位于 \(x_i\),第 \(i\) 堵墙位于 \(y_i\),第 \(i\) 个锤子可以对应的敲开第 \(i\) 堵墙。以原点为起点,给定终点 \(t\…

一款.NET开源、跨平台的DASH/HLS/MSS下载工具

前言 今天大姚给大家分享一款.NET开源(MIT License)、免费、跨平台的DASH/HLS/MSS下载工具,并且支持点播和直播(DASH/HLS)的内容下载:N_m3u8DL-RE。 网络流媒体传输协议介绍 DASH DASH是一种基于HTTP的自适应流媒体网络传输协议,它允许流媒体内容以多个编码和比特率的形…

计算机组成与体系结构-主存编址

主存 存储器的基本单位是存储单元 一般以8位二进制(bit位)为一个存储单元(Byte 字节) 每个存储单元都有一个地址,一般用十六进制 数表示主存编址 编址 给每个单元赋予一个地址码,就叫编址。经编址后,存储器在逻辑上便构成一个线性地址空间。编址可以按字 或 字节编址 寻址 存…