Django——数据库查询

>>> cong = User.objects.get(pk=1)
>>> cong
<User: user:cong>
>>> cong.diary.values('content')
<QuerySet [{'content': '今天天气晴'}]>

查看cong的日记。
这里cong.diary是因为定义了related_name=‘diary’

class Diary(models.Model):
    user = models.ForeignKey(User, related_name='diary', on_delete=models.SET_NULL, blank=True, null=True)
    content = models.TextField()
    create_time = models.IntegerField()

所以,user.diary就相当于Diary。

>>> users = User.objects.all()
>>> users
<QuerySet [<User: user:cong>, <User: user:ming>]>

>>> users = list(User.objects.all())
>>> users
[<User: user:cong>, <User: user:ming>]
>>> users = User.objects.filter(username='cong', id=1)
>>> users
<QuerySet [<User: user:cong>]>

>>> users = User.objects.filter(username='cong', id=1).exclude(id=1)
>>> users
<QuerySet []>

过滤年龄大于20的user

>>> users = User.objects.all().exclude(age__gt=20)
>>> users
<QuerySet [<User: user:cong>]>

模糊查找

>>> users =User.objects.filter(username__contains='on')
>>> users
<QuerySet [<User: user:cong>]>
>>> groups = cong.group
>>> groups
<django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager object at 0x000001C83610EA60>
>>> groups.values('name')
<QuerySet [{'name': 'IT'}, {'name': '开发'}]>
>>> groups.first()
<Group: Group object (1)>
>>> groups.last()
<Group: Group object (2)>

原生SQL方式:

>>> users = User.objects.raw('select * from app_user')
>>> users
<RawQuerySet: select * from app_user>
>>> list(users)
[<User: user:cong>, <User: user:ming>]

反向查询:反向查询是 related_name__id,两个下划线id

>>> user = User.objects.filter(diary__id=3)
>>> user
<QuerySet []>

聚合方法

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

>>> user = User.objects.all().aggregate(Avg('age'))
>>> user
{'age__avg': 24.0}

通过user.related name, 然后在 .values (‘字段’) ,括号里是字段名,一定要用引号引起来。

>>> user = User.objects.get(pk=1)
>>> user.diary.values('content')
<QuerySet [{'content': '今天天气晴'}]>

ps:

>>> user = User.objects.filter(diary__id=1)
>>> user
<QuerySet [<User: user:cong>]>
>>> content = user.diary.values('content')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'QuerySet' object has no attribute 'diary'

>>> user = User.objects.get(pk=1)
>>> user.diary.values('content')
<QuerySet [{'content': '今天天气晴'}]>
>>> user
<User: user:cong>

这里 第一种方法报错了,因为他返回的是queryset,第二种可以。
注意一下吧,就是要get一个User的对象,才可以使用related name.values的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值