zoukankan      html  css  js  c++  java
  • 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确定循环的次数  

  • 相关阅读:
    小结
    day17——其他内置函数
    day16——函数式编程和内置函数
    Python中的函数
    Python字符串的两种方式——百分号方式,format的方式
    第一章 初识Mysql
    day13 Python数据基本类型
    day14 集合与函数
    第七章 线性回归预测模型
    json-lib(ezmorph)、gson、flexJson、fastjson、jackson对比,实现java转json,json转java
  • 原文地址:https://www.cnblogs.com/suncunxu/p/10496168.html
Copyright © 2011-2022 走看看