django orm queryset 单表查询

本文详细介绍了Django ORM的使用,包括查询所有数据、获取指定条数、查询特定字段、使用get和filter方法、运用Q函数进行复杂查询,以及聚合查询如count和distinct。此外,还涵盖了order_by的排序功能和聚合函数如Sum、Avg的使用。文章深入浅出地解析了Django数据库操作的各种技巧和应用场景。

1.查询所有数据

data=Infos.objects.all()#data是一个django.db.models.query.QuerySet对象

data[0].name

2.查询前3条数据

data=Infos.objects.all()[:3]

data[0].name

3.查询某个字段

data = Infos.objects.values("name")#data为queryset,里面存的不是对象而是dict <QuerySet [{'name': '张三'}, {'name': '李思'}]>

data[0]['name']#存在values结果集便是由dict组成

4.get和filter查询

data=Infos.objects.get(id=3)#返回对象

data.name

data=Infos.objects.filter(name="中岛美嘉")

data[0].name

get:条件必须是主键或者唯一约束字段,并且数据必须存在,不然会异常

filter:查询字段没有限制,只要是表中的一个字段就可,返回queryset或者空queryset

d=dict(name="玉置浩二",num=12)

data=Infos.objects.filter(**d)

5.Q函数:用来表示将or或者不等于查询等(多个Q使用|来表示)

from django.db.models import Q

or

data=Infos.objects.filter(Q(name=”理查德克莱德曼“)|Q(num=12))

!= 查询

data=Infos.objects.filter(~Q(name="郎朗"))

还可以使用exclude实现!=查询

data=Infos.objects.exclude(name="郎朗")

count()查询数据量

count=Infos.objects.all().count()

distinct()去重,根据values设置的字段执行

 s=Infos.objects.values("name").filter(title="肖邦").distinct()
order_by()排序

默认是升序,

Infos.objects.all().order_by("id","title")

可以按照id的降序

Infos.objects.all().order_by("-id","title")

6.聚合查询,对数据值求和,求平均等。由annotate和aggregate组成

 from django.db.models import Count,Sum,Avg

 data = Infos.objects.values("name").annotate(Sum("num"))#annotate类似于groupby,对数据分组,没有values就对主键分组#

In [62]: data = Infos.objects.aggregate(id_count=Count("id"))#aggregate只返回计算结果==dict方式

In [63]: data
Out[63]: {'id_count': 5}
union(并集)、intersection(交集)、difference(差集)------每次查询的字段必须相同

In [64]: v1=工资模型.objects.filter(payment__gt=9000)

In [65]: v2=工资模型.objects.filter(payment__gt=3000)

data=v1.union(v2)

其他如法炮制


 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值