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

Django模型管理器/QuerySet 常见的方法

模型管理器/QuerySet 常见的方法

get([**kwargs]) 方法
  • 用途:获取满足条件的唯一对象。
  • 参数:关键字参数,指定查询条件。
  • 返回值:模型对象。
  • 异常:如果找到多个对象或未找到对象,将分别抛出 MultipleObjectsReturnedDoesNotExist 异常。

示例

try:
    student = Student.objects.get(pk=1)
except Student.DoesNotExist:
    print("No student found with pk=1")
except Student.MultipleObjectsReturned:
    print("Multiple students found with the same pk")
first() 方法
  • 用途:返回查询集中的第一个对象(如果存在)。
  • 参数:无。
  • 返回值:模型对象或 None(如果查询集为空)。

示例

student = Student.objects.filter(age__gt=18).first()
if student:
    print(student.name)
else:
    print("No student older than 18 found")
last() 方法
  • 用途:返回查询集中的最后一个对象(如果存在)。
  • 参数:无。
  • 返回值:模型对象或 None(如果查询集为空)。

示例

student = Student.objects.filter(graduated=False).last()
if student:
    print(student.name)
else:
    print("No current student found")
count() 方法
  • 用途:返回查询集中的对象数量。
  • 参数:无。
  • 返回值:整数。

示例

num_students = Student.objects.count()
print(f"Total number of students: {num_students}")
filter(**kwargs) 方法
  • 用途:根据给定的条件筛选对象。
  • 参数:关键字参数,指定查询条件。
  • 返回值QuerySet 对象。

示例(已在问题描述中给出)。

exclude(**kwargs) 方法
  • 用途:排除满足给定条件的对象。
  • 参数:关键字参数,指定排除条件。
  • 返回值QuerySet 对象。

示例(已在问题描述中给出)。

all() 方法
  • 用途:获取查询集中的所有对象。
  • 参数:无。
  • 返回值QuerySet 对象。

示例(已在问题描述中给出)。

values(*fields) 方法
  • 用途:返回包含指定字段值的字典的 QuerySet
  • 参数:字段名称的列表或可变参数。
  • 返回值:包含字典的 QuerySet 对象。

示例(已在问题描述中给出),但注意,values() 返回的 QuerySet 中的每个元素都是字典,而不是模型实例。

order_by(*fields) 方法
  • 用途:对查询结果进行排序。
  • 参数:字段名称的列表或可变参数。字段前加 - 表示降序排序。
  • 返回值:排序后的 QuerySet 对象。

示例(已在问题描述中给出)。

distinct() 方法
  • 用途:对查询结果进行去重。
  • 参数:无。
  • 返回值:去重后的 QuerySet 对象。
  • 注意:通常与 values() 方法一起使用以指定去重的字段。

示例(稍作修改):

# 假设有多个学生可能有相同的姓名和性别,但其他字段不同
unique_names_sexes = Student.objects.values("name", "sex").distinct()
for item in unique_names_sexes:
    print(item)

额外方法

exists() 方法
  • 用途:检查查询集是否包含至少一个对象。
  • 参数:无。
  • 返回值:布尔值。

示例

if Student.objects.filter(enrolled=True).exists():
    print("There are enrolled students")
values_list(*fields, flat=False) 方法
  • 用途:返回包含指定字段值的元组的 QuerySet
  • 参数:字段名称的列表或可变参数;flat=True 时,如果查询集只包含一个字段,则返回该字段值的列表而不是元组的列表。
  • 返回值:包含元组的 QuerySet 对象或字段值的列表(如果 flat=True)。

示例

# 获取所有学生的ID和姓名,作为元组列表
students_info = Student.objects.values_list("id", "name")
for student_info in students_info:
    print(student_info)

# 仅获取所有学生的姓名,作为列表
students_names = Student.objects.values_list("name", flat=True)
for name in students_names:
    print(name)

这些方法提供了强大的查询和数据处理能力,使得Django的ORM成为处理数据库操作的有力工具。

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

相关文章:

  • python量化交易——金融数据管理最佳实践——使用qteasy管理本地数据源
  • python GUI之实现一个自定义的范围滑块控件:QRangeSlider
  • 可观测之Tracing-eBPF生态和发展
  • javaweb + AI day03
  • 大模型能给舆情分析带来哪些突破?
  • Harmony os next~鸿蒙原子化服务开发实战:天气卡片开发全解析
  • Mybatis调用存储过程
  • 什么是ADSI
  • Python 安装
  • SFP(Small Form-factor Pllugable)详解
  • 什么是 Java 中的线程同步?
  • 七、JOIN 语法详解与实战示例
  • Ubuntu 下通过 Docker 部署 Nginx 服务器
  • 进程控制(创建、终止、等待、替换)
  • [Windows] 批量为视频或者音频生成字幕 video subtitle master 1.5.2
  • 2025年2月文章一览
  • 网络安全-使用DeepSeek来获取sqlmap的攻击payload
  • 数据结构与算法:二叉树
  • 登录日志管理:通用分页和排序封装、 查询登录日志列表、删除登录日志、清空登录日志、解锁用户登录状态(解锁密码错误次数超限)
  • echarts柱状图不是完全铺满容器,左右两边有空白
  • 深入探索MiniQMT:量化交易的新选择
  • Java 进阶笔记
  • 《Python实战进阶》No 9 补充:使用 Celery 实现异步任务队列 (补充Windows环境下的安装和应用)
  • 一、旋转编码器模块分析与使用
  • kali liux的下载
  • OpenFlexure记录
  • [Jsprit]Jsprit学习笔记-vrp问题新解的接收策略
  • 天疱疮是一种慢性、严重的皮肤疾病
  • 自动化测试
  • 恶意 SSP 注入收集密码