【问题标题】:join two queries together as one - django将两个查询合并为一个 - django
【发布时间】:2023-03-14 09:20:01
【问题描述】:

我正在开发一个 django 项目,我想基本上从我正在创建的两个查询中创建一个查询。

我有一个包含以下列的朋友表

user - friend - status - create
-------------------------------
josh - omar - 1 - 1
steve - omar - 1 - 1
omar - tava - 1 - 1

我会创建一个查询来获取用户是 omar 的记录,并创建另一个查询来获取朋友是 omar 的记录。

有没有一种方法可以创建一个查询来组合两个查询,例如

获取 omar 是朋友或用户的所有记录,并将它们设置为一个查询集对象。

【问题讨论】:

    标签: django


    【解决方案1】:

    听起来您可能想看看 Q 对象。这些使您可以根据您的描述...进行两个单独的查询,并将结果相加。 complex-lookups-with-q-objects

    文档中有一个示例显示您可以进行“或”查找,如下所示:

    Q(question__startswith='Who') | Q(question__startswith='What')

    【讨论】:

      【解决方案2】:
      from django.db.models import Q
      Friend.object.filter(Q(user=omar)|Q(friend=omar))
      

      queryset = queryset1 | queryset2
      

      【讨论】:

      • 第一种方法更快,因为它只对数据库进行 1 次查询。第二个做2个查询,然后使用python组合两个查询集。
      • @ShikharChauhan 完全错误 - 第二种解决方案严格等同于第一种,并在 where 子句中发出一个带有 OR 的单个查询。您可以自己发现这一点,只需在 shell 中尝试并检查 django.db.connection.queries
      • @Ykh .all() 是多余的 - .filter() 已经返回 Queryset
      • @brunodesthuilliers 感谢您的指出。我会调查这个:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多