python manage.py shell
from blog.models import *
查询:
1、全表查询
b = Book.objects.all()
b[0].title
>>> b = Book.objects.all()
>>> b[0].title
'python'
2、查询前2条数据
>>> b = Book.objects.all()[:2]
>>> print(b)
<QuerySet [<Book: python>, <Book: java>]>
3、查询某个字段
>>> b = Book.objects.values("title")
>>> print(b[1]["title"])
java
values_list方法,数据以列表返回,列表元素以字典表示
>>> b = Book.objects.values_list("title")[:3]
>>> b
<QuerySet [('python',), ('java',), ('linux',)]>
4、使用get方法查询数据
>>> b = Book.objects.get(id=1)
>>> b
<Book: python>
>>> b.price
Decimal('99.00')
5、使用filter方法查询数据
>>> b = Book.objects.filter(id=2)
>>> b
<QuerySet [<Book: java>]>
6、and查询
>>> b = Book.objects.filter(id=2,publisher=2)
>>> b
<QuerySet [<Book: java>]>
>>> d = dict(id=2,publisher=2)
>>> b = Book.objects.filter(**d)
>>> b
<QuerySet [<Book: java>]>
7、or查询
>>> from django.db.models import Q
>>> b = Book.objects.filter(Q(id=1)|Q(title='Django'))
>>> b
<QuerySet [<Book: python>, <Book: Django>]>
8、不等于查询,在Q前面使用"~"即可
>>> b = Book.objects.filter(~Q(id=1)|Q(title='Django'))
>>> b
<QuerySet [<Book: java>, <Book: linux>, <Book: Django>]>
9、country方法统计查询数据的数据量
>>> b = Book.objects.filter(~Q(id=1)|Q(title='Django')).count()
>>> b
3
10、去重查询,distinct
>>> b = Book.objects.values("publisher_id").filter(publisher_id=1).distinct()
>>> b
<QuerySet [{'publisher_id': 1}]>
11、排序,order_by默认升序,降序只需要在字段前面加"-"即可
>>> b = Book.objects.order_by('id')
>>> b
<QuerySet [<Book: python>, <Book: java>, <Book: linux>, <Book: Django>]>
>>> b = Book.objects.order_by('-id')
>>> b
<QuerySet [<Book: Django>, <Book: linux>, <Book: java>, <Book: python>]>
>>> b = Book.objects.order_by('publisher_id','-id')
>>> b
<QuerySet [<Book: linux>, <Book: python>, <Book: java>, <Book: Django>]>
12、聚合查询aggregate(*args,**kwargs)
>>> from django.db.models import Avg,Min,Sum,Max
>>> b = Book.objects.aggregate(average_price=Avg('price'))
>>> b
{'average_price': Decimal('132.500000')}
>>> Book.objects.aggregate(Avg('price'), Max('price'), Min('price'))
{'price__avg': Decimal('132.500000'), 'price__max': Decimal('200.00'), 'price__min': Decimal('99.00')}
标识符,值是计算出来的聚合值。
13、分组查询annotate(*args,**kwargs)
>>> b = Book.objects.filter(publisher_id=1).values("price")
>>> b
<QuerySet [{'price': Decimal('99.00')}, {'price': Decimal('111.00')}]>
>>> b = Book.objects.filter(publisher_id=1).aggregate(Sum("price"))
>>> b
{'price__sum': Decimal('210.00')}
>>> b = Book.objects.values("publisher_id").annotate(Sum("price"))
>>> b
<QuerySet [{'publisher_id': 1, 'price__sum': Decimal('210.00')}, {'publisher_id': 2, 'price__sum': Decimal('120.00')}, {'publisher_id': 3, 'price__sum': Decimal('200.00')}]>
- 上述例子讲述了常用的数据查询方法,但有时我们需要使用不同的查询条件来满足多方面的查询需求,上述的查询条件get和filter只能使用等值的方法来匹配数据,若想使用大于、不等于或者模糊查询的匹配方法,则可使用匹配符实现,说明如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗