You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指定MySQL原生查询语句转换为Django ORM写法

MySQL语句转Django ORM实现方案

你提供的原生查询SQL如下:

SELECT * FROM student.student_data 
WHERE created_by IN (SELECT user_id FROM user_profile WHERE user_location IN(7, 8));

以下是两种符合Django ORM规范的实现方式,默认你已经完成了表和模型的映射:

  • StudentData模型映射student.student_data表,created_by字段对应表中同名字段
  • UserProfile模型映射user_profile表,包含user_id、user_location字段

写法1:子查询实现(和原SQL逻辑完全对齐)

这种写法生成的执行SQL和你编写的原生SQL逻辑完全一致:

# 构造子查询获取符合位置要求的用户ID列表
target_user_ids = UserProfile.objects.filter(user_location__in=[7, 8]).values_list("user_id", flat=True)
# 主查询筛选对应记录
query_result = StudentData.objects.filter(created_by__in=target_user_ids)

query_result默认返回所有字段的结果,等价于原SQL中的SELECT *效果。


写法2:关联查询简化写法

如果StudentData的created_by字段定义为关联UserProfile的外键,可直接用跨表查询语法简化代码:

query_result = StudentData.objects.filter(created_by__user_location__in=[7, 8])

Django会自动解析关联关系生成对应SQL,执行结果和原SQL完全一致。


内容的提问来源于stack exchange,提问作者Rahul Pagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:36:03