• 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


  • 相关阅读:
    Java第十次作业-房地产;学生成绩计算
    找回感觉之模拟房地产首付计算
    软件工程第四次作业—结对项目
    【作业】需要改进的用户体验二三则
    项目互测测试方式及报告
    [ASE]项目介绍及项目跟进——TANK BATTLE·INFINITE
    Hello World!
    [ASE]sprint3 总结 & sprint4计划
    [ASE][Daily Scrum]12.15
    [ASE][Daily Scrum]12.12
  • 原文地址:https://www.cnblogs.com/yanjunwu/p/8986856.html
Copyright © 2020-2023  润新知