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 上面所说的,
WHERE
您可以在以下 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` 对象不起作用