1. Django查询基础与单表查询概述
在Django框架中,ORM(对象关系映射)系统为我们提供了强大的数据库查询能力。作为Python开发者,掌握Django ORM的各种查询技巧是后端开发的基本功。单表查询是最基础也是最常用的操作,通过下划线语法我们可以实现各种复杂的查询条件。
Django的查询API设计得非常直观,通过objects.filter()方法配合各种字段查找(field lookups)可以实现90%以上的日常查询需求。这些查找通过在字段名后添加双下划线__来指定,比如id__gt表示ID大于某个值。这种语法既保持了Pythonic的风格,又清晰地表达了查询意图。
提示:Django的查询是惰性执行的,只有在真正需要结果时(如迭代、打印、强制转换等)才会访问数据库。这让我们可以链式调用多个查询方法而不用担心性能问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 比较查询操作符详解
2.1 基本比较运算符
Django提供了四种基本的比较运算符,对应SQL中的比较操作:
python复制# 小于 (lt - less than)
persons = models.Person.objects.filter(id__lt=2)
# 小于等于 (lte - less than or equal)
persons = models.Person.objects.filter(id__lte=2)
# 大于 (gt - greater than)
persons = models.Person.objects.filter(id__gt=2)
# 大于等于 (gte - greater than or equal)
persons = models.Person.objects.filter(id__gte=2)
这些操作符可以用于所有可比较的字段类型,包括数字、日期和时间等。在实际项目中,我经常使用这些操作符来实现分页查询(如获取ID大于某值的记录)或时间范围查询(如创建时间在某个日期之后的记录)。
2.2 范围查询的两种实现方式
Django提供了两种方式来实现范围查询,效果相同但语法不同:
python复制# 方式1:使用gte和lte组合
persons = models.Person.obje
