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

Python学习笔记--使用Django查询数据

1.all():查所有

用于查询所有:

# all()返回的是 QuerySet 类型数据,类似于 list,里面放的是一个个模型类的对象,可用索引下标取出模型类的对象。
def query_book(request):books = models.Book.objects.all()for book in books:print(book.title, book.price, book.publish, book.pub_date)return HttpResponse("<p>查询成功!</p>")

2.filter():查询满足条件的数据

用于查询符合条件的数据,pk参数用于根据主键进行查询

def filter_book(request):books = models.Book.objects.filter(pk=1)print(books)print("/////////////////////////////////")books = models.Book.objects.filter(publish="清华大学出版社",price=300)print(books, type(books))return HttpResponse("<p>查询成功!</p>")

3.exclude():查询不符合条件的数据

用于查询不符合条件的数据

def exclude_book(request):books = models.Book.objects.exclude(publish="清华大学出版社")print(books, type(books))return HttpResponse("<p>查询成功!</p>")

4.get():获取一个对象

用于查询符合条件的返回模型类的对象符合条件的对象只能为一个,如果符合筛选条件的对象超过了一个或者一个都没有都会抛出错误

def get_book(request):book = models.Book.objects.get(pk=5)book = models.Book.objects.get(price=1000)print(book, type(book))return HttpResponse("<p>查询成功!</p>")

5.order_by():排序

用于对查询结果进行排序,参数为排序字段名,默认为升序排序,降序为在字段前面加个负号 -

def order_book(request):books = models.Book.objects.order_by("price")print(books, type(books))books = models.Book.objects.order_by("-price")print(books, type(books))return HttpResponse("<p>查询成功!</p>")

6.reverse():对排序进行反转

用于对原排序查询结果进行反转

def reverse_book(request):# 按出版日期升序排列books_asc = models.Book.objects.all().order_by("pub_date")# 使用reverse()方法对查询结果进行反转后变为降序books = books_asc.reverse()for book in books:print(book.id,book.title, book.price, book.publish, book.pub_date)return HttpResponse("<p>查询成功!</p>")

7.count():计数

用于统计查询结果的数量

def count_book(request):count = models.Book.objects.count()books = models.Book.objects.filter(price=300).count()print(count, books)return HttpResponse("<p>查询成功!</p>")

8.first():查询第1条数据

用于返回查询结果的第一个对象,如果没有符合条件的对象则返回 None,可以用索引下标 [0] 取出模型类的对象

def first_book(request):book = models.Book.objects.first()print(book, type(book))return HttpResponse("<p>查询成功!</p>")

9.last():查询最后第1条数据

用于返回查询结果的最后一个对象,如果没有符合条件的对象则返回 None,注意:last() 方法不能用索引下标 [-1],ORM 没有逆序索引。

def last_book(request):book = models.Book.objects.last()print(book, type(book))return HttpResponse("<p>查询成功!</p>")

10.exists() :判断是否存在

用于判断查询结果是否存在,返回布尔值 True 或 False

def exists_book(request):exist = models.Book.objects.filter(price=300).exists()print(exist)return HttpResponse("<p>查询成功!</p>")

11.values() :获得查询结果的字典列表
用于返回查询结果的字典列表,字典的键为模型类的字段名,值为字段值

def values_book(request):# 查询所有的id字段和price字段的数据books = models.Book.objects.values("pk", "price")print(books[0]["price"], type(books))  # 得到的是第一条记录的price字段的数据return HttpResponse("<p>查找成功!</p>")

执行后控制台输出:

200.00 <class 'django.db.models.query.QuerySet'>
[03/Sep/2025 10:56:28] "GET /values_book/ HTTP/1.1" 200 22

12.values_list() :获得查询结果的元组列表

用于返回查询结果的元组列表,元组的元素为模型类的字段值

def values_list_book(request):# 查询所有的price字段和publish字段的数据books = models.Book.objects.values_list("price", "publish")print(books)print(books[0][0], type(books))  # 得到的是第一条记录的price字段的数据return HttpResponse("<p>查找成功!</p>")

执行后控制台输出:

<QuerySet [(Decimal('200.00'), '功夫出版社'), (Decimal('200.00'), '清华大学出版社'), (Decimal('300.00'), '清华大学出版社')]>
200.00 <class 'django.db.models.query.QuerySet'>

13.distinct():去重

用于返回查询结果的去重后的列表,一般是结合 values 或者 values_list 使用。

def distinct_book(request):# 对对象去重没有意义,因为对象本身就是唯一的,不可能重复books = models.Book.objects.distinct()print(books)# 结合 values_list 使用,查询出所有的publish字段的去重后的列表books = models.Book.objects.values_list("publish").distinct()print(books)return HttpResponse("<p>查找成功!</p>")

执行后控制台输出

<QuerySet [('功夫出版社',), ('清华大学出版社',)]>
<QuerySet [<Book: Book object (1)>, <Book: Book object (2)>, <Book: Book object (3)>]>

第1个结果进行了去重,第2个对对象去重没有意义。

14.filter基于双下划线的模糊查询

(1)区间范围查询,包括in、gt、gte、lt、lte、range

# 使用双下划线+in进行区间查询
books = models.Book.objects.filter(price__in=[100,200])
# 查询价格大于200的数据
books = models.Book.objects.filter(price__gt=200)
# 查询价格大于等于100的数据
books = models.Book.objects.filter(price__gte=100)
# 查询价格小于等于100的数据
books = models.Book.objects.filter(price__lte=100)
# 查询价格介于100和200之间的数据,包括100和200
books = models.Book.objects.filter(price__range=[100,200])

(2)包含:__contains区分大小写,__icontains不区分大小写

books = models.Book.objects.filter(title__icontains="python")

(3)查询以特定内容开头、结尾、精准匹配:__startswoth、__endswith、__iexact

# 查询标题以python开头的数据
books = models.Book.objects.filter(title__startswith="python")
# 查询标题以python结尾的数据
books = models.Book.objects.filter(title__endswith="python")
#  查询标题精确匹配python的数据
books = models.Book.objects.filter(title__iexact="python")

(4)日期查询:__year、__month、__day

# __year 是 DateField 数据类型的年份,= 号后面为数字。
books = models.Book.objects.filter(pub_date__year=2015)
# __month 是 DateField 数据类型的月份,= 号后面为数字。
books = models.Book.objects.filter(pub_date__month=10)
# __day 是 DateField 数据类型的日,= 号后面为数字。
books = models.Book.objects.filter(pub_date__day=10)

http://www.xdnf.cn/news/19951.html

相关文章:

  • 网络协议之https?
  • 智能开发新突破:大模型驱动的QAC与TESSY助手实战分享
  • 【工具变量】上市公司绿色供应链管理示范企业DID数据(2010-2024年)
  • phpstorm 操作git 另外的操作在 我的收藏
  • Maven动态控制版本号秘籍:高效发包部署,版本管理不再头疼!
  • Top 10 Kali Linux Tools for Hacking 2025.2
  • 《WINDOWS 环境下32位汇编语言程序设计》第11章 动态链接库和钩子
  • nano banana官方最强Prompt模板来了!六大场景模板详解
  • GEM5学习(4): 运行全系统模式的ARM系统
  • 如何构建企业级RAG知识库?实战方法、关键细节与平台选型
  • 只会刷App?大学生学透Android开发,直接开挂!
  • 【沉浸式解决问题】浮点数计算精度误差,round后值错误,0.1+0.2不等于0.3?
  • Ai Qwen3解答epochs多少为最佳 仅共参考
  • 机器视觉opencv总结
  • NuttX编译流程与config.h生成解析
  • 插入排序及希尔排序
  • AR智慧运维系统介绍
  • 【机器学习】实战:市场增长点分析挖掘项目
  • 算法模板(Java版)_链表(单链表、双链表)、栈和队列
  • HarmonyOS Stage 模型深度解析:构建现代化、高性能应用
  • IotDB批量数据脱敏DEMO
  • wpf 自定义控件,只能输入小数点,并且能控制小数点位数
  • 微服务多级缓存:从问题到实战(小白也能看懂的亿级流量方案)
  • FastJson
  • 技术框架之脚手架实现
  • .vsdx文件转pdf、word、ppt等文件在线分享(免费版)
  • Linux的墙上时钟和单调时钟的区别
  • Flutter环境搭建全攻略之-Macos环境搭建
  • Android 中自定义控件实现 AppCompatSpinner 功能
  • 面试复习题-Flutter场景题