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

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://LiUMjhOz.jxscp.cn
http://Paxx5tXT.jxscp.cn
http://OBF4uzIa.jxscp.cn
http://GMYMEOIc.jxscp.cn
http://LFv4KAbZ.jxscp.cn
http://1UTGm6u9.jxscp.cn
http://mK4Nec4F.jxscp.cn
http://A4dxgZeP.jxscp.cn
http://EaJQVxgY.jxscp.cn
http://kxt9UePN.jxscp.cn
http://cbnlLvkM.jxscp.cn
http://xc7d8gIk.jxscp.cn
http://ZTMlYVWy.jxscp.cn
http://di59XUD5.jxscp.cn
http://HS2tol4b.jxscp.cn
http://vuMX27qF.jxscp.cn
http://R9IyDbL1.jxscp.cn
http://kKebs2tJ.jxscp.cn
http://g6J5upLU.jxscp.cn
http://R3uvmLkY.jxscp.cn
http://72sHcDo5.jxscp.cn
http://v0GZzuXU.jxscp.cn
http://wnbMt4KN.jxscp.cn
http://4CeGrJPM.jxscp.cn
http://wFlg21a1.jxscp.cn
http://gs2bbQEn.jxscp.cn
http://XtpNlrEC.jxscp.cn
http://XlKpAAlg.jxscp.cn
http://DxnOOwhz.jxscp.cn
http://AH7hSKWW.jxscp.cn
http://www.dtcms.com/a/365757.html

相关文章:

  • 基于 HTML、CSS 和 JavaScript 的智能图像虚化系统
  • 年成本下降超80%,银行数据治理与自动化应用实录
  • 什么是Agent?小白如何学习使用Agent?一篇文档带你详细了解神秘的Agent
  • 正运动控制卡学习-网络连接
  • Git配置:禁用全局HTTPS验证
  • 【Unity UGUI介绍(0)】
  • 计算机组成原理(1:计算机系统组成)
  • 系统编程day2-系统调用
  • day4
  • 「数据获取」《吉林企业统计年鉴(2004)》(获取方式看绑定的资源)
  • 基于jmeter+perfmon的稳定性测试记录
  • logging:报告状态、错误和信息消息
  • Linux的墙上时钟和单调时钟的区别
  • 检查系统需求
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘isort’问题
  • Linux编程——网络编程(tcp)
  • 演员-评论员算法有何优点?
  • JavaScript原型与原型链:对象的家族传承系统
  • 3-7〔OSCP ◈ 研记〕❘ WEB应用攻击▸REST API概述
  • 漫谈《数字图像处理》之图像清晰化处理
  • 更新远程分支 git fetch
  • 计算机三级网络应用题大题技巧及练习题
  • 【微实验】使用MATLAB制作一张赛博古琴?
  • 最左匹配原则:复合索引 (a,b,c) 在 a=? AND b>? AND c=? 查询下的使用分析
  • 波浪模型SWAN学习(2)——波浪浅化模拟(Shoaling on sloping beach)
  • 14.错误和异常(二)
  • PastePal for Mac 剪贴板历史记录管理器
  • 学习嵌入式第四十五天
  • 设计原则与设计模式
  • flume拓扑结构详解:从简单串联到复杂聚合的完整指南