zoukankan      html  css  js  c++  java
  • select_related

    作用:减少DB访问次数

    from django.db import models
    
    class Blog(models.Model):
        name = models.CharField(max_length=100)
        tagline = models.TextField()
    
        def __str__(self):              # __unicode__ on Python 2
            return self.name
    
    class Author(models.Model):
        name = models.CharField(max_length=50)
        email = models.EmailField()
    
        def __str__(self):              # __unicode__ on Python 2
            return self.name
    
    class Entry(models.Model):
        blog = models.ForeignKey(Blog)
        headline = models.CharField(max_length=255)
        body_text = models.TextField()
        pub_date = models.DateField()
        mod_date = models.DateField()
        authors = models.ManyToManyField(Author)
        n_comments = models.IntegerField()
        n_pingbacks = models.IntegerField()
        rating = models.IntegerField()
    
        def __str__(self):              # __unicode__ on Python 2
            return self.headline
    

    e = Entry.objects.get(id=5) //访问一次数据库

    b = e.blog //再访问一次数据库

    e = Entry.objects.select_related('blog').get(id=5) //访问一次数据库

    b = e.blog //不访问数据库

    加入queryset中,顺序不重要

    Entry.objects.filter(pub_date__gt=timezone.now()).select_related('blog')

    Entry.objects.selected_related('blog').filter(pub_date__gt=timezone.now())

    from django.db import models
    
    class City(models.Model):
        # ...
        pass
    
    class Person(models.Model):
        # ...
        hometown = models.ForeignKey(City)
    
    class Book(models.Model):
        # ...
        author = models.ForeignKey(Person)
    
    b = Book.objects.select_related('author__hometown').get(id=4)
    p = b.author         # Doesn't hit the database.
    c = p.hometown       # Doesn't hit the database.
    
    b = Book.objects.get(id=4) # No select_related() in this example.
    p = b.author         # Hits the database.
    c = p.hometown       # Hits the database.

    清空条件

    without_relations = queryset.select_related(None)

    多重查找

     select_related('foo', 'bar')

    控制查询缓存深度

    b = Book.objects.select_related(depth=1).get(id=4)

  • 相关阅读:
    修改某路径下的文件名
    关于提取字符串中数字
    解决采集知乎数据时由于账号被封遗漏的账号重爬问题(python代码)
    project proposal写作框架
    PHP实现生成透明背景的PNG缩略图函数
    PHP中的绝对和相对路径解析
    js设置页面锚点
    列表顺序储存
    c++修饰符重载
    c++配置文件读取、修改、添加
  • 原文地址:https://www.cnblogs.com/tuifeideyouran/p/4209571.html
Copyright © 2011-2022 走看看