如何使用Django ORM构造FROM子句中的嵌套查询?
Django ORM构造嵌套查询方案
可以用Django ORM构造你需要的这类嵌套查询,以下是两种实用方案:
方式一:利用Subquery和OuterRef(Django 1.11及以上版本支持)
先定义子查询的数据集,再基于这个子查询做外层查询。假设你的模型为TableModel,对应数据库中的table_name表,r1是模型的字段:
from django.db.models import Subquery from yourapp.models import TableModel # 构造子查询:获取r1字段的所有数据 sub_query = TableModel.objects.values('r1') # 外层查询基于子查询结果,这里返回r1字段数据 result = TableModel.objects.filter(pk__in=Subquery(sub_query)).values('r1')
这段代码生成的SQL会呈现嵌套结构,和你给出的查询逻辑一致。
方式二:使用RawSQL执行原生嵌套查询
如果需要完全匹配你给出的SQL结构,可以直接用原生SQL语句:
from yourapp.models import TableModel # 直接执行原生嵌套查询 result = TableModel.objects.raw('SELECT * FROM (SELECT r1 FROM table_name) temp')
这种方式直接复用你提供的SQL语句,适合对原生SQL熟悉的场景,但要注意防范SQL注入风险,不要直接拼接用户可控的内容。
内容的提问来源于stack exchange,提问作者Minhaz Ahmed
相关产品推荐
相关产品推荐

