一篇文章搞懂flask_sqlalchemy常用操作

简介: 这篇文章介绍了Flask框架中SQLAlchemy库的常用操作,包括查询、删除和更新数据的方法和技巧。

一.查询:

1.1 查询所有

模型类.query.all() 等价于 select * from user
如果有条件的查询:
模型类.query.filter_by(字段名=值) --> select * from user where 字段名=值
模型类.query.filter_by(字段名=值).first() --> select * from user where 字段=值 limit=1

如:

select * from user where age>17 and gender ='男'
select * from user username like 'zhang%'
select * from user where rdatetime > xxx rdatetime <xxx;

注意:
模型类.query.filter() 里边是布尔的条件模型类.query.filter(模型名.字段名==值)
模型类.query.filter_by() 里边是一个等值模型类.query.filter_by(字段名=值)

1.2 模型类.query.filter()

1.模型类.query.filter().all()------------------>列表
2.模型类.query.filter().first()-------------->对象
如:

User.query.filter(User.username.endwith('z')).all() like '%z'
User.query.filter(User.username.startwith('z')).all() like 'z%'
User.query.filter(User.username.contains('z')).all() like '%z%'
User.query.filter(User.username.like('%z%')).all()

1.3 多条件:

或者:or_ 并且:and_ 非:not_

User.query.filter(or_(User.username.like('z%'),User.username.contains('i'))).all()
select * from user where username like 'z%' or username like '%z%'

User.query.filter(and_(User.username.like('z%'),User.rdatetime > '2020-10-22 23:58:23')).all()
select * from user where username like 'z%' and rdatetime > '2020-10-22 23:58:23'

1.4 若过滤时间和整型:> ,< ,>=, <=,!=

age:17,18,19,20,22,23,25…

select * from user where age in [17,18,22]

1.5 排序:order_by

user_list=User.query.filter(User.username.contains('z')).order_by(-User.rdatetime).all()
user_list=User.query.order_by(-User.id).order_by(-User.rdatetime).all()

对所有得进行排序,注意order_by()的参数:
1.直接是字符串:‘字段名’ 这样不能排序
2.模型.字段名:模型.字段 order_by(-模型.字段) 倒叙 还可以使用desc()函数

1.6 限制:limit

limit的使用 + offset
user_list=User.query.limit(2).all() 默认获取两条数据
user_list=User.query.offset(2).limit(2).all() 跳过两条记录再获取两条记录

Jquery CDN:引用网上的jQuery资源,加快速度,减少项目的复杂度和空间,更加方便与用户快速获取js效果。

查询小总结:
1.User.query.all() 所有
2.User.query.get(pk) 一个
3.User.query.filter() * ???
如果要检索的字段是字符串(varchar,db.String)
User.username.startwith(‘’)
User.username.endwitd(‘’)
User.username.contains(‘’)
User.username.like(‘’) 传入的参数需要加%
User.username.in_([‘’,‘’,‘’,‘’])
User.username==
如果要检索的字段是整型或日期类型:
User.age.lt(18) 双下划线
User.rdatetime.gt(‘…’)
User.age.le(18)
User.age.ge(18)
User.age.between(18,25)
多个条件一起检索:and_ or_
非得条件:or_

排序:order_by()
获取指定数量:limit() offset()
4.User.query.filter_by(username=‘xxx’) User.query.filter(username== ‘xxx’)

二. 删除

2.1 逻辑删除

其实就是更新(定义数据库中的表的时候,添加一个字段名为isdelete,通过此字段控制是否删除)
id=request.args.get(id) 用于接收get请求中的参数
user=User.query.get(id)
user.isdelete=True
db.session.commit()

2.2 物理删除

(彻底从数据库中删除)
id=request.args.get(id) 用于接收get请求中的参数,若为post就把args替换成form
user=User.query.get(id)
db.session.delete(user)
db.session.commit()

三. 更新

id=request.args.get(id)
user=User.query.get(id)

修改对象的属性

user.username=xxx
user.phone=xxx

提交修改

db.session.commit()

需要提交:
添加
user=User()
user.xxx=xxx
db.session.add(user)
db.session.commit()

删除
user=User.query.get(id)
db.session.delete(user)
db.session.commit()

更新
user=User.query.get(id) #获取数据库中的对象

修改对象的属性

user.username=xxx
user.phone=xxx

提交修改

db.session.commit()

相关文章
|
7天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
4天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2461 14
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
4天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1498 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19273 29
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18822 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17514 13
Apache Paimon V0.9最新进展
|
6天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
355 11
|
1月前
|
存储 人工智能 前端开发
AI 网关零代码解决 AI 幻觉问题
本文主要介绍了 AI Agent 的背景,概念,探讨了 AI Agent 网关插件的使用方法,效果以及实现原理。
18696 16
|
2天前
|
算法 Java
JAVA并发编程系列(8)CountDownLatch核心原理
面试中的编程题目“模拟拼团”,我们通过使用CountDownLatch来实现多线程条件下的拼团逻辑。此外,深入解析了CountDownLatch的核心原理及其内部实现机制,特别是`await()`方法的具体工作流程。通过详细分析源码与内部结构,帮助读者更好地理解并发编程的关键概念。
|
2天前
|
SQL 监控 druid
Druid连接池学习
Druid学习笔记,使用Druid进行密码加密。参考文档:https://github.com/alibaba/druid
193 82