[Python]Django 数据库数据的增删改查(二)

简介: [Python]Django 数据库数据的增删改查(二)

5. 查询数据

5.1 基本查询

5.1.1 get()

get()得到一个指定的数据对象。

book = BookInfo.objects.get(id=1

查询不存在的数据会报异常

get()只能用于查询结构为一个的查询

5.1.2 all()

all()得到模型的所有数据对象。返回结果是一个列表。

books = BookInfo.objects.all()
• 1

5.1.3 count()

count()返回查询结果的数量。

books_cnt = BookInfo.objects.all().count()

# BookInfo.objects.count()也可以统计所有数据对象的个数
books_cnt = BookInfo.objects.count()

5.2 过滤查询 filter() & get() & exclude()

相当于SQL中的where语句select * from bookinfo where 条件语句

  • filter():筛选过滤符合条件的n个结果(n的取值为0-n)。返回结果为一个列表
  • get():筛选符合条件的1个结果(返回结果只能一个,大于等于一个会报错),返回一个单一对象
  • exclude():排除掉符合条件剩下的结果,相当于条件语句中not

语法:

以filter()为例

filter(字段名__运算符=值)

字段名和运算符间使用两个下划线进行分割,所以属性名不能包括多个下划线。

5.2.1 运算符

  • 相等
  • exact:表示判等。
  • 模糊查询
  • contains:是否包含。
  • 说明:如果要包含%无需转义,直接写即可。
  • startswith、endswith:以指定值开头或结尾。
  • 以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.
  • 空查询
  • isnull:是否为null。
  • 范围查询
  • in:是否包含在范围内。
  • 比较查询
  • gt大于 (greater then)
  • gte大于等于 (greater then equal)
  • lt小于 (less then)
  • lte小于等于 (less then equal)
  • 不等于的运算符,使用exclude()过滤器。
  • 日期查询
  • year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。

5.2.2 相等

  • 相等
  • exact:表示判等。
# 查询编号为1的图书
# exact相当于 等于号
book = BookInfo.objects.get(id__exact=1)
# 简写形式
book = BookInfo.objects.get(id=1)

# exact相当于 等于号
book = BookInfo.objects.filter(id__exact=1)
# 简写形式
book = BookInfo.objects.filter(id=1)

返回结果为一个列表

5.2.3 模糊查询

  • 模糊查询
  • contains:是否包含。
  • 说明:如果要包含%无需转义,直接写即可。
  • startswith、endswith:以指定值开头或结尾。
  • 以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.
# 查询书名包含'湖'的图书
# 不知道返回结果有几个,使用filter
# 包含 运算符 contains
# 如果要包含%无需转义,直接写即可
books = BookInfo.objects.filter(name__contains='湖')

# 查询书名以'部'结尾的图书
# 不知道返回结果有几个,使用filter
# startswith、endswith:以指定值开头或结尾。
books = BookInfo.objects.filter(name__endswith='部')

5.2.4 空查询

  • 空查询
  • isnull:是否为null。
# 查询书名为空的图书
books = BookInfo.objects.filter(name__isnull=True)

5.2.5 范围查询

  • 范围查询
  • in:是否包含在范围内。
# 查询编号为1或3或5的图书
books = BookInfo.objects.filter(id__in=[1, 3, 5])

5.2.6 比较查询

  • 比较查询
  • gt大于 (greater then)
  • gte大于等于 (greater then equal)
  • lt小于 (less then)
  • lte小于等于 (less then equal)
  • 不等于的运算符,使用exclude()过滤器。
# 查询编号大于3的图书
books = BookInfo.objects.filter(id__gt=3)

# 查询编号不大于3的图书
books = BookInfo.objects.exclude(id__gt=3)


相关文章
|
1月前
|
存储 缓存 数据库
数据库数据删除策略:硬删除vs软删除的最佳实践指南
在项目开发中,“删除”操作常见但方式多样,主要分为硬删除与软删除。硬删除直接从数据库移除数据,操作简单、高效,但不可恢复;适用于临时或敏感数据。软删除通过标记字段保留数据,支持恢复和审计,但增加查询复杂度与数据量;适合需追踪历史或可恢复的场景。两者各有优劣,实际开发中常结合使用以满足不同需求。
94 4
|
10天前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
61 20
|
28天前
|
前端开发 JavaScript 关系型数据库
基于python的租房网站-房屋出租租赁系统(python+django+vue)源码+运行
该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为本学期的课程作业作品。欢迎大家提出宝贵建议。
59 6
|
2月前
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
|
1月前
|
人工智能 关系型数据库 分布式数据库
让数据与AI贴得更近,阿里云瑶池数据库系列产品焕新升级
4月9日阿里云AI势能大会上,阿里云瑶池数据库发布重磅新品及一系列产品能力升级。「推理加速服务」Tair KVCache全新上线,实现KVCache动态分层存储,显著提高内存资源利用率,为大模型推理降本提速。
|
3月前
|
关系型数据库 数据库 数据安全/隐私保护
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
|
2月前
|
SQL Java 数据库连接
【YashanDB数据库】由于网络带宽不足导致的jdbc向yashandb插入数据慢
由于网络带宽不足导致的jdbc向yashandb插入数据慢
|
2月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
2月前
|
人工智能 Java 数据安全/隐私保护
[oeasy]python081_ai编程最佳实践_ai辅助编程_提出要求_解决问题
本文介绍了如何利用AI辅助编程解决实际问题,以猫屎咖啡的购买为例,逐步实现将购买斤数换算成人民币金额的功能。文章强调了与AI协作时的三个要点:1) 去除无关信息,聚焦目标;2) 将复杂任务拆解为小步骤,逐步完成;3) 巩固已有成果后再推进。最终代码实现了输入验证、单位转换和价格计算,并保留两位小数。总结指出,在AI时代,人类负责明确目标、拆分任务和确认结果,AI则负责生成代码、解释含义和提供优化建议,编程不会被取代,而是会更广泛地融入各领域。
98 28

热门文章

最新文章