Django:ORM 是不是支持 SQL“IN”运算符?

Posted

技术标签:

【中文标题】Django:ORM 是不是支持 SQL“IN”运算符?【英文标题】: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 进行这样的查询?

谢谢。

【问题讨论】:

【参考方案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/

【讨论】:

以上是关于Django:ORM 是不是支持 SQL“IN”运算符?的主要内容,如果未能解决你的问题,请参考以下文章

django-将数据库数据转换成JSON格式(ORM和SQL两种情况)

Django ORM:相当于 SQL `NOT IN`? `exclude` 和 `Q` 对象不起作用

Django 本身是不是支持公用表表达式?

Django ORM 是不是在 sql where 子句中将已删除的字段映射到其他字段之前?

Django之 数据库ORM

Python ORM框架之SQLALchemy