• ORM了解知识


    1.不分组情况下聚合查询  aggregate

    aggregate(Sum('price'),Max('price'))

    属于QuerySet的方法,返回值是字典

    2.在分组情况下聚合查询  annotate

    分组:values('tag1','tag2').annotate(Sum('price'),max_price=Max('price'))

    分组后取字段:在分组后在使用values('分组字段及聚合字段')

    分组后筛选:在分组后使用filter('只对聚合结果进行过滤')

    3/常用字段与字段的常用属性

    choices=((1,'男'),(0,'女'))

    4.关系字段

    ForeignKey  |  OneToOneField

    models.ForeignKey(to='Book',null=True,on_delete=models.SET_NULL,db_constraint=False)

    ManyToManyField

    元信息

    Model类可以通过元信息类设置索引和排序信息

    元信息是在Model类中定义一个Meta子类

    class Meta:

      自定义表名

      db_table='table_name'

      联合索引

      index_together = ('tag1','tag2')

      联合唯一索引

      unique_together = ('tag3','tag4')

      排序字段

      ordering = 'ordering_tag'

      #/admin/中显示的表名称

      verbose_name = 'table_name'

    2.基于对象查询的sql优化

    好处:信息存放到对象中,取值方便

    坏处:所有字段都进行查询

    uq = User.objects.all()

    print(uq)

    print(uq.query)

    only:只取规定的字段形成对象(查主键)

    uql = User.objects.all().only('name','age')

    print(uql)

    print(uql.first().gender))当查询不存在的字段时将重新查询

    defer:只取规定的字段外的字段形成对象(查主键)

    us = User.objects.all().defer('name','age')

    好处:只对所需字段进行查询

    坏处:数据放在字典中,相比对象取值不是那么方便

    usd = User.objects.values('name','age')

    print(usd.query)

    在路径中取别名:name = 'show_book' 反解:reverse(name)

    前端也可以通过得到的对象进行连表查询

    前端进行for循环时,可以使用for_loop确定循环的次数  

  • 相关阅读:
    Java言语与C言语有哪些不同
    只会增删改查的Java程序员该如何发展
    java“单根继承结构”
    Java编程领域你需要懂得技术名词解释
    HTTP相关工具类/协助类分享
    说说Java到底是值传递仍是引用传递
    Java自定义ClassLoader实现
    深化详细分析java的发展前景!
    2020Java面试题及答案,命中率高达90%
    Python爬虫详解,每个步骤都给你细致的讲解(附源码)
  • 原文地址:https://www.cnblogs.com/suncunxu/p/10496168.html
Copyright © 2020-2023  润新知