当前位置:Gxlcms > 数据库问题 > Django—— ORM查询(sql优化)优化了解,Django(元信息)元类建索引

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

时间:2021-07-01 10:21:17 帮助过:3人阅读

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. (1<span style="color: #000000;">)only() 只查某些字段,要查看其他的字段,后续也能点出其他字段
  2. uql1 </span>= Book.objects.all().only(<span style="color: #800000;">"</span><span style="color: #800000;">name</span><span style="color: #800000;">"</span>,<span style="color: #800000;">"</span><span style="color: #800000;">price</span><span style="color: #800000;">"</span>) <span style="color: #008000;">#</span><span style="color: #008000;"> 只查了 "name","price" 两个字段</span>
  3. Book.objects.all() <span style="color: #008000;">#</span><span style="color: #008000;"> 书的所有字段都查了一遍</span>
  4. <span style="color: #0000ff;">print</span>(uq11.first().gender) <span style="color: #008000;">#</span><span style="color: #008000;"> 后续也能点出其他字段,不过自己又重新执行了查询该字段的sql,相当于在重新查了一遍</span>
  5. <span style="color: #000000;">
  6. (</span>2<span style="color: #000000;">)defer() 除了某些字段,其他的都查
  7. Book.objects.all().defer(</span><span style="color: #800000;">"</span><span style="color: #800000;">name</span><span style="color: #800000;">"</span>,<span style="color: #800000;">"</span><span style="color: #800000;">price</span><span style="color: #800000;">"</span>) <span style="color: #008000;">#</span><span style="color: #008000;"> 除了 "name","price" 两个字段,其他的字段都查</span>
  8. <span style="color: #000000;">
  9. (</span>3)values <span style="color: #008000;">#</span><span style="color: #008000;"> 后续不能再点出其他字段了</span>
  10. Book.objects.values(<span style="color: #800000;">"</span><span style="color: #800000;">name</span><span style="color: #800000;">"</span>,<span style="color: #800000;">"</span><span style="color: #800000;">price</span><span style="color: #800000;">"</span>) <span style="color: #008000;">#</span><span style="color: #008000;"> 只查了 "name","price" 两个字段</span>

 

自定义聚合函数

  1. <span style="color: #0000ff;">from</span> django.db.models <span style="color: #0000ff;">import</span><span style="color: #000000;"> Aggregate, CharField
  2. </span><span style="color: #008000;">#</span><span style="color: #008000;"> 自定义聚合函数的名字</span>
  3. <span style="color: #0000ff;">class</span> Concat(Aggregate): <span style="color: #008000;">#</span><span style="color: #008000;"> 写一个类继承Aggregate,</span>
  4. function = <span style="color: #800000;">‘</span><span style="color: #800000;">GROUP_CONCAT</span><span style="color: #800000;">‘</span><span style="color: #000000;">
  5. template </span>= <span style="color: #800000;">‘</span><span style="color: #800000;">%(function)s(%(distinct)s%(expressions)s)</span><span style="color: #800000;">‘</span>
  6. <span style="color: #0000ff;">def</span> <span style="color: #800080;">__init__</span>(self, expression, distinct=False, **<span style="color: #000000;">extra):
  7. super(Concat, self).</span><span style="color: #800080;">__init__</span><span style="color: #000000;">(
  8. expression,
  9. distinct</span>=<span style="color: #800000;">‘</span><span style="color: #800000;">DISTINCT </span><span style="color: #800000;">‘</span> <span style="color: #0000ff;">if</span> distinct <span style="color: #0000ff;">else</span> <span style="color: #800000;">‘‘</span><span style="color: #000000;">,
  10. output_field</span>=<span style="color: #000000;">CharField(),
  11. </span>**<span style="color: #000000;">extra)
  12. eg: Book.objects.aggregate( name</span>=Concat(<span style="color: #800000;">"</span><span style="color: #800000;">name</span><span style="color: #800000;">"</span>) )

 

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

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

人气教程排行