码迷,mamicode.com
首页 > 数据库 > 详细

Django—— ORM查询(sql优化)优化了解,Django(元信息)元类建索引

时间:2019-03-08 16:52:19      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:tag   put   字段   一个   index   import   cat   tab   函数   

Django(元信息)元类建索引

索引:索引的一个主要目的就是加快检索表中数据,索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。

class Book(models.Model)
    name = models.CharField(max_length=64)

    class Meta:
        # 自定义表名
        db_table = table_name
        # 联合索引: 索引的一个主要目的就是加快检索表中数据
        index_together = (tag1, tag2)
        # 联合唯一索引:两个字段全部重复才算重复
        unique_together = (tag3, tag4)
        # 排序字段
        ordering = ordering_tag
        # /admin/中显示的表名称
        verbose_name = table_name

 

ORM查询(sql优化)优化 ,    了解

(1)only() 只查某些字段,要查看其他的字段,后续也能点出其他字段
    uql1 = Book.objects.all().only("name","price")   # 只查了 "name","price" 两个字段
    Book.objects.all()    # 书的所有字段都查了一遍
    print(uq11.first().gender)    # 后续也能点出其他字段,不过自己又重新执行了查询该字段的sql,相当于在重新查了一遍

(2)defer()  除了某些字段,其他的都查
    Book.objects.all().defer("name","price")  # 除了 "name","price" 两个字段,其他的字段都查

(3)values  # 后续不能再点出其他字段了
    Book.objects.values("name","price")   # 只查了 "name","price" 两个字段

 

自定义聚合函数

    from django.db.models import Aggregate, CharField

    # 自定义聚合函数的名字
    class Concat(Aggregate):  # 写一个类继承Aggregate,
        function = GROUP_CONCAT
        template = %(function)s(%(distinct)s%(expressions)s)

        def __init__(self, expression, distinct=False, **extra):
            super(Concat, self).__init__(
                expression,
                distinct=DISTINCT  if distinct else ‘‘,
                output_field=CharField(),
                **extra)

    eg: Book.objects.aggregate( name=Concat("name") )

 

Django—— ORM查询(sql优化)优化了解,Django(元信息)元类建索引

标签:tag   put   字段   一个   index   import   cat   tab   函数   

原文地址:https://www.cnblogs.com/liu--huan/p/10496424.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!