【问题标题】:Django: does the ORM support the SQL "IN" operator?Django:ORM 是否支持 SQL“IN”运算符?
【发布时间】:2011-07-25 19:27:27
【问题描述】:

Django ORM 是否支持 SQL IN 运算符?比如:

SELECT *
FROM user
WHERE id IN (1, 5, 34, 567, 229)

如何使用 Django ORM 进行这样的查询?

谢谢。

【问题讨论】:

    标签: django django-queryset django-orm


    【解决方案1】:

    in

    User.objects.filter(id__in=[1, 5, 34, 567, 229])
    
    print _.query
    SELECT <fields> FROM "auth_user" WHERE "auth_user"."id" IN (1, 5, 34, 567, 229)
    

    【讨论】:

      【解决方案2】:

      除此之外,Django ORM 还支持 Sub-Query:

      例如:

      from django.db.models import Subquery
      users = User.objects.all()
      UserParent.objects.filter(user_id__in=Subquery(users.values('id')))
      

      【讨论】:

      • in 子句中可以放入多少元素有限制吗?
      • 在没有 OuterRef 的情况下使用子查询有什么意义?
      【解决方案3】:

      正如 Yuji 上面所说的,__in=[] 被翻译成下面的 SQL:

      WHERE IN ()

      您可以在以下 Django API 文档的 Field lookups 部分找到 django SQL WHERE 运算符的完整参考。

      https://docs.djangoproject.com/en/1.9/ref/models/querysets/

      【讨论】:

        猜你喜欢
        • 2022-06-29
        • 2021-04-27
        • 2010-10-27
        • 2011-08-27
        • 1970-01-01
        • 2015-03-05
        • 2012-04-25
        • 2012-02-11
        • 2014-05-28
        相关资源
        最近更新 更多