• django orm高级查询 F表达式和Q表达式以及分组annotate


    1.关联关系映射及查询
    1.1django默认开启延迟加载所有多对1和1对1如果不使用select_related(),需要会延迟加载获取到相关对象,因为延迟可能会造成n+1次查询的问题,所以便有了
    select_related()进行急迫抓取;
    1.2django默认不会去取多对多的的多方,除非使用prefetch_related('roles'), 【User的class中申明 roles = models.ManyToManyField("Role") 

    1.3django不需要配置1对多这种关系,A的子表B映射了foreignKey,django会底层给附表A的类加上一个b_set,当然此名字(b_set)可以用foreignKey的参数related_name指定
    2.F表达式:
    from django.db.models import F
    (忘记了可以在已有项目中搜索)
    获取字段1<字段2的数据-->querySet.filter(field1__lt=F('field2'))

    3.Q值表达式:
    from django.db.models import Q (忘记了可以在已有项目中搜索)

    视频参见:https://www.imooc.com/learn/1087 (全部orm查数据库知识都包含了)
    网页参见:https://www.colabug.com/2309808.html https://www.cnblogs.com/fqh202/p/9115121.html https://cn.aliyun.com/jiaocheng/451495.html


    django的分组使用annotate,如:RebotPhone.objects.values('status').annotate(count = Count('phone_id')).values('status','count').order_by()
    第一个values是分组字段,第二个values是需要查询的字段, order_by():默认的排序字段也会自动加入到GROUP BY子句中. 要避免这样的情况,只需在查询时清空默认的order by


  • 相关阅读:
    Swift
    Swift
    第二章_session管理
    HDU-1387-Team Queue
    Install Orace 11g on Solaris 10 Sparc 64 bit
    Linux 多学习过程
    dispatch_once认识分析
    关于包围神经猫的想法实现
    嵌入在网站上Flash播放机(2)
    初学者应学会如何加快seo
  • 原文地址:https://www.cnblogs.com/yanjunwu/p/8986856.html
Copyright © 2020-2023  润新知