• ORM查询(细致):


    ORM查询(细致):
    1.正向查找
    ret1=model.Book.objects.first()
    print(ret1.title)
    print(ret1.price)
    print(ret1.publisher)
    print(ret1.publisher.name) #因为一对多的关系所以ret1.publisher是一个对象,而不是一个queryset集合
    2.反向查找:通过_set创建关联再查询
    ret2=models.Publish.objects.last()
    print(ret2.name)
    print(ret2.city)
    print(obj.book_set.values("title").distinct())
    如何拿到与它绑定的Book对象呢?
    print(ret2.book_set.all()) #ret2.book_set是一个queryset集合
    3.了不起的下划线(__)之单表条件查询
    models.Tb1.objects.filter(id__lt=10,id__gt=1) #获取id大于1且小于10
    models.Tb1.objects.filter(id__in=[11,22,33]) #获取id等于11、22、33的数据
    models.Tb1.objects.exclude(id__in=[11,22,33]) # not in
    models.Tb1.objects.filter(name__contains="ven")
    models.Tb1.objects.filter(name__icontains="ven") # icontains 大小写不敏感
    models.Tb1.objects.filter(id__range=[1,2])
    startswith,istartswith,endswith,iendswith(以...开头,以...结尾)
    4.了不起的下划线(__)之多表条件关联查询
    .distinct()去重
    条件里面可以通过 , 添加其它条件
    models.Publish.objects.filter(book__title="python").values("name").distinct()
    models.Publish.objects.filter(book__title="python",book_red='red').distinct().values("name")
    ` values()方法里面也可以查找显示关联表的内容__也可用
    聚合查询aggregate():一个对象--子句的参数描述叙述了我们想要计算的聚合值
    分组查询annotate():多个对象--是QoerySet的一个终止子句,意思是说,他返回一个包含一些键值对的字典。键的名称是
    聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。
    如果你想要为聚合值指定一个名称,可以向聚合子句提供它
    Avg('')取平均值
    5.F查询与Q查询
    调用 from django.db.models import F 对列的数值进行操作 无法用__进行修改值
    models.Publish.objects.all().update(price=F("price")+20)
    调用 from django.db.models import Q 很重要
    obj=models.Book.objects.filter(Q(price__gt=50) & (Q(id=3) | Q(title='php')))[0]
  • 相关阅读:
    Queue
    Singly-Linked List
    Array
    HTTP请求详解
    封装element的API
    uniapp登录逻辑
    Selector学习笔记 (未完待续)
    <Scalable IO in Java>学习
    Spring PropertyMapper源码阅读笔记
    leetcode 字节跳动探索系列
  • 原文地址:https://www.cnblogs.com/wylshkjj/p/11228399.html
Copyright © 2020-2023  润新知