【问题标题】:How do I optimize the following Django model queries?如何优化以下 Django 模型查询?
【发布时间】:2015-09-23 20:21:58
【问题描述】:

我有以下 Django 模型:

class Journey(models.Model):
    user_id = models.PositiveIntegerField(db_index=True)

class Visit(models.Model):
    room_id = models.PositiveIntegerField(db_index=True)
    is_passed = models.BooleanField(default=False)
    journey = models.ForeignKey(Journey)

还有以下方法:

class JourneyService(object):
    def get_journey_by_user(self, user_id):
        try:
            journey = Journey.objects.get(user_id=user_id)
        except Journey.DoesNotExist:
            raise JourneyNotFoundError
        return journey

    def get_visit_by_room(self, user_id, room_id):
        journey = self.get_journey_by_user(user_id=user_id)
        try:
            visit = journey.visit_set.get(room_id=room_id)
        except Visit.DoesNotExist:
            raise VisitNotFoundError
        return visit

据我了解,调用 get_visit_by_room 将访问数据库两次。这可以改进为一击吗?我已经阅读了有关 select_related 查找的内容,但我很难在此处应用它。

【问题讨论】:

    标签: django django-models orm


    【解决方案1】:

    您可以在一个查询中使用连接来完成:

    Visit.objects.get(room_id=room_id, journey__user_id=user_id)
    

    实际上是否更快取决于您的数据库;你应该配置文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      相关资源
      最近更新 更多