Flask数据的增删改查(CRUD)_flask删除数据自动更新

查询年龄小于17的学生信息

Student.query.filter(Student.s_age < 17)
students = Student.query.filter(Student.s_age.__lt__(17))

模糊查询,使用like,查询姓名中第二位为花的学生信息

like ‘_花%’,_代表必须有一个数据,%任何数据

students = Student.query.filter(Student.s_name.like('_花%'))

筛选:

offset()
# 跳过3个数据
stus = Student.query.offset(3)

limit()
# 跳过3个数据,查询5个信息
stus = Student.query.offset(3).limit(5)

order_by()
# 按照id降序,升序
students = Student.query.order_by(‘id’)
students = Student.query.order_by(‘-id’)

students = Student.query.order_by(desc('id'))
students = Student.query.order_by(asc('id'))students = Student.query.order_by('id desc')
students = Student.query.order_by('id asc')

get()
#使用get,获取id=1的学生对象,get()默认接收id
# 拿不到值不会报错,返回空
students = Student.query.get(4)

first()
# 获取年龄最大的一个
stus = Student.query.order_by(‘-s_age’).first()

逻辑运算

and_
filter(and_(条件),条件…)

或or_filter(or_(条件),条件…)非not_filter(not_(条件),条件…)

例子:
and_
students = Student.query.filter(Student.s_age==16,
Student.s_name.contains(‘花’))

students = Student.query.filter(and_(Student.s_age==16,Student.s_name.contains('花')))

not_
students = Student.query.filter(or_(Student.s_age16,
Student.s_name.contains(‘花’)))
or_
students = Student.query.filter(not_(Student.s_age
16),
Student.s_name.contains(‘花’))

注意:

  1. fliter和filter_by的结果可遍历
  2. 可以通过对其结果使用all()方法将其转换成一个列表或者first()转换成objects对象。
  3. all()获得的是列表,列表没有first()方法
  4. fliter和filter_by有flrst()方法,没有last方法

数据的添加在flask中修改数据后需要添加事务和提交事务

事务: 完整,一致,持久,原子
第一种:保存数据
将数据放入缓存
db.session.add(stu)
将缓存中的数据提交
db.session.commit()


在学生表中添加数据

@blue.route(‘/createstu/’)
def create_stu():
s = Student()
s.s_name = ‘小花’
s.s_age = 19

db.session.add(s)
db.session.commit()return '添加成功'

提交事务,使用commit提交我们的添加数据的操作


批量创建数据

批量添加数据时可以使用add()、add_list()添加事务
add():
db.session.add_all(stu)
db.session.commit()
stu是一个对象

add_list():
db.session.add_all(stus_list)
db.session.commit()
stus_list是一个列表,其每个元素都是一个对象


第一种

@app_blue.route(‘create_many_stu/’,methods=[‘GET’])
def create_many_stu():
if request.method == ‘GET’:
stu = Student()
stus_list = []
for i in range(5):
stu = Student()
stu.s_name = ‘小花%s’ % random.randrange(10, 1000)
stu.s_age = random.randint(10,20)
stus_list.append(stu)

db.session.add_all(stus_list)
db.session.commit()# db.session.add(stu)
# db.session.commit
return '批量创建'

db.session.add_all(stus_list)
db.session.commit()
将列表中的数据统一添加到缓存区中,并提交


第二种

第二种:重写init

models中:

def init(self, name, age):
# 2,给对象赋值
self.s_name = name
self.s_age = age

views中:
@app_blue.route(‘create_many_stu_init/’,methods=[‘GET’])
def create_many_stu():
if request.method == ‘GET’:
stus_list = []
for i in range(5):
stu = Student(‘小花%s’ % random.randrange(10,1000), random.randint(10,20))
stus_list.append(stu)

    db.session.add_all(stus_list)db.session.commit()# db.session.add(stu)# db.session.commitreturn '批量创建成功'

修改数据

思路:获取到需要修改的对象,通过对象.属性的方式将属性重新赋值,然后使用commit提交事务


写法1

students = Student.query.filter_by(s_id=3).first()

students.s_name = ‘哈哈’

db.session.commit()


写法2

Student.query.filter_by(s_id=3).update({‘s_name’:‘娃哈哈’})

db.session.commit()


删除数据

格式:db.session.delete(对象)
db.session.commit()

注意:在修改数据(增删改)中如果使用commit()的话,只会修改本地缓存中的数据,数据库中的数据不会更新。
必须使用:db.session.commit()


写法1

students = Student.query.filter_by(s_id=2).first()
db.session.delete(students)
db.session.commit()


写法2

students = Student.query.filter_by(s_id=1).all()
db.session.delete(students[0])
db.session.commit()

模型

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

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

相关文章

MySQL(高级特性篇) 13 章——事务基础知识

一、数据库事务概述 事务是数据库区别于文件系统的重要特性之一 &#xff08;1&#xff09;存储引擎支持情况 SHOW ENGINES命令来查看当前MySQL支持的存储引擎都有哪些&#xff0c;以及这些存储引擎是否支持事务能看出在MySQL中&#xff0c;只有InnoDB是支持事务的 &#x…

影视文件大数据高速分发方案

在当今的数字时代&#xff0c;影视行业的内容创作和传播方式经历了翻天覆地的变化。随着4K、8K高清视频的普及&#xff0c;以及虚拟现实(VR)和增强现实(AR)技术的发展&#xff0c;影视文件的数据量正以前所未有的速度增长。这就要求行业内的参与者必须拥有高效的大数据传输解决…

C语言教程——文件处理(2)

目录 前言 一、顺序读写函数&#xff08;续&#xff09; 1.1fprintf 1.2fscanf 1.3fwrite 1.4fread 二、流和标准流 2.1流 2.2标准流 2.3示例 三、sscanf和sprintf 3.1sprintf 3.2sscanf 四、文件的随机读写 4.1fseek 4.2ftell 4.3rewind 五、文件读取结束的…

建表注意事项(2):表约束,主键自增,序列[oracle]

没有明确写明数据库时,默认基于oracle 约束的分类 用于确保数据的完整性和一致性。约束可以分为 表级约束 和 列级约束&#xff0c;区别在于定义的位置和作用范围 复合主键约束: 主键约束中有2个或以上的字段 复合主键的列顺序会影响索引的使用&#xff0c;需谨慎设计 添加…

线性回归的损失和优化02

线性回归的损失和优化 学习目标 知道线性回归中损失函数知道使用正规方程对损失函数优化的过程知道使用梯度下降法对损失函数优化的过程 假设刚才的房子例子&#xff0c;真实的数据之间存在这样的关系&#xff1a; 真实关系&#xff1a; 真实房子价格 0.02中心区域的距离 0.…

年化18%-39.3%的策略集 | backtrader通过xtquant连接qmt实战

原创内容第785篇&#xff0c;专注量化投资、个人成长与财富自由。 大年初五&#xff0c;年很快就过完了。 其实就是本身也只是休假一周&#xff0c;但是我们赋予了它太多意义。 周五咱们发布发aitrader v4.1&#xff0c;带了backtraderctp期货的实盘接口&#xff1a; aitra…

【数据结构】_链表经典算法OJ(力扣/牛客第二弹)

目录 1. 题目1&#xff1a;返回倒数第k个节点 1.1 题目链接及描述 1.2 解题思路 1.3 程序 2. 题目2&#xff1a;链表的回文结构 2.1 题目链接及描述 2.2 解题思路 2.3 程序 1. 题目1&#xff1a;返回倒数第k个节点 1.1 题目链接及描述 题目链接&#xff1a; 面试题 …

成绩案例demo

本案例较为简单&#xff0c;用到的知识有 v-model、v-if、v-else、指令修饰符.prevent .number .trim等、computed计算属性、toFixed方法、reduce数组方法。 涉及的功能需求有&#xff1a;渲染、添加、删除、修改、统计总分&#xff0c;求平均分等。 需求效果如下&#xff1a…

git基础使用--4---git分支和使用

文章目录 git基础使用--4---git分支和使用1. 按顺序看2. 什么是分支3. 分支的基本操作4. 分支的基本操作4.1 查看分支4.2 创建分支4.3 切换分支4.4 合并冲突 git基础使用–4—git分支和使用 1. 按顺序看 -git基础使用–1–版本控制的基本概念 -git基础使用–2–gti的基本概念…

Kafka下载

一、Kafka下载 下载地址&#xff1a;https://kafka.apache.org/downloads 二、Kafka安装 因为选择下载的是 .zip 文件&#xff0c;直接跳过安装&#xff0c;一步到位。 选择在任一磁盘创建空文件夹&#xff08;不要使用中文路径&#xff09;&#xff0c;解压之后把文件夹内容…

nodejs:express + js-mdict 网页查询英汉词典,能播放声音

向 DeepSeek R1 提问&#xff1a; 我想写一个Web 前端网页&#xff0c;后台用 nodejs js-mdict, 实现在线查询英语单词 1. 项目结构 首先&#xff0c;创建一个项目目录&#xff0c;结构如下&#xff1a; mydict-app/ ├── public/ │ ├── index.html │ ├── st…

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具01

1、开发背景 大家都很熟悉&#xff0c;Oracle提供了Impdp和ExpDp工具&#xff0c;功能很强大&#xff0c;可以进行db的导入导出的处理。但是对于Sqlserver数据库只是提供了简单的图形化的导出导入工具&#xff0c;在实际的开发和生产环境不太可能让用户在图形化的界面选择移行…

【Block总结】完全注意力Fully Attentional,同时捕捉空间和通道的注意力|即插即用

论文信息 标题: Fully Attentional Network for Semantic Segmentation论文链接: https://arxiv.org/pdf/2112.04108GitHub链接: https://github.com/maggiesong7/FullyAttentional 创新点 全注意力模块&#xff08;FLA&#xff09;: 该模块能够在一个相似性图中同时捕捉空…

强化学习、深度学习、深度强化学习的区别是什么?

前言 深度强化学习就是 深度学习 和 强化学习 的结合体。它让计算机程序&#xff08;也就是智能体&#xff09;在特定环境中不断尝试&#xff0c;从错误中学习&#xff0c;最终找到最优的行动策略。 深度学习是AlphaGo从棋谱里学习&#xff0c;强化学些Alphazero 学习规则&am…

99.20 金融难点通俗解释:中药配方比喻马科维茨资产组合模型(MPT)

目录 0. 承前1. 核心知识点拆解2. 中药搭配比喻方案分析2.1 比喻的合理性 3. 通俗易懂的解释3.1 以中药房为例3.2 配方原理 4. 实际应用举例4.1 基础配方示例4.2 效果说明 5. 注意事项5.1 个性化配置5.2 定期调整 6. 总结7. 代码实现 0. 承前 本文主旨&#xff1a; 本文通过中…

笔灵ai写作技术浅析(四):知识图谱

知识图谱(Knowledge Graph)是一种结构化的知识表示方式,通过将知识以图的形式进行组织,帮助AI系统更好地理解和利用信息。在笔灵AI写作中,知识图谱技术被广泛应用于结构化组织各种领域的知识,使AI能够根据写作主题快速获取相关的背景知识、概念关系等,从而为生成内容提供…

基于python的Kimi AI 聊天应用

因为这几天deepseek有点状况&#xff0c;导致apikey一直生成不了&#xff0c;用kimi练练手。这是一个基于 Moonshot AI 的 Kimi 接口开发的聊天应用程序&#xff0c;使用 Python Tkinter 构建图形界面。 项目结构 项目由三个主要Python文件组成&#xff1a; 1. main_kimi.py…

python算法和数据结构刷题[5]:动态规划

动态规划&#xff08;Dynamic Programming, DP&#xff09;是一种算法思想&#xff0c;用于解决具有最优子结构的问题。它通过将大问题分解为小问题&#xff0c;并找到这些小问题的最优解&#xff0c;从而得到整个问题的最优解。动态规划与分治法相似&#xff0c;但区别在于动态…

JavaFX - 3D 形状

在前面的章节中&#xff0c;我们已经了解了如何在 JavaFX 应用程序中的 XY 平面上绘制 2D 形状。除了这些 2D 形状之外&#xff0c;我们还可以使用 JavaFX 绘制其他几个 3D 形状。 通常&#xff0c;3D 形状是可以在 XYZ 平面上绘制的几何图形。它们由两个或多个维度定义&#…

wax到底是什么意思

在很久很久以前&#xff0c;人类还没有诞生文字之前&#xff0c;人类就产生了语言&#xff1b;在诞生文字之前&#xff0c;人类就已经使用了语言很久很久。 没有文字之前&#xff0c;人们的语言其实是相对比较简单的&#xff0c;因为人类的生产和生活水平非常低下&#xff0c;…