Django-ORM常用

去重统计 annotate

MM.objects.values_list(‘item’).annotate(Count(‘item’))

  • 查询告警通知中,多少告警类型数量
from django.db.models import Count
from apps.monitor.models import AlertCal
obj = AlertCal.objects.values_list('type').annotate(Count('type'))
obj
Out[5]: <QuerySet [('sendtohubotapi', 1206), ('Email', 303)]>

ordery_by 排序

去重统计主机告警数,TOP 10

AlertCal.objects.filter(Q(time__range=['2020-10-22 00:00:00', '2020-10-22 23:59:59']) & Q(env='FAT')).values_list('hostname').annotate(cnt_host=Count('hostname')).order_by('-cnt_host')[:3]

Out[24]: <QuerySet [(' uatfat129134', 182), (' jrfat030228', 102), (' node100.xx.com', 51)]>

反向查询

class NginxModel(models.Model):
    name = models.CharField(max_length=128, verbose_name="ng名称")
    desc = models.CharField(max_length=128, default="", blank=True, verbose_name="ng描述")

class NginxConf(models.Model):
    name = models.CharField(max_length=128, verbose_name="站点名称")
    type = models.ForeignKey(NginxModel, on_delete=models.SET_NULL, blank=True, null=True, verbose_name="关联ng模块")
  • 查询NginxModel有多少conf关联
from apps.ops_nginx.models import NginxModel
obj = NginxModel.objects.first()
obj.nginxconf_set.all().count()
Out[19]: 9
# 过滤状态是使用中的
obj.nginxconf_set.all().filter(status='running').count()
Out[21]: 5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值