django - 如何使用子查询 django ORM?

标签 django orm subquery

sql子查询是:

SELECT  * 
FROM   ( SELECT * 
         FROM   article 
         ORDER BY Fid desc 
         LIMIT 0, 200
       ) as l 
 WHERE  keyId = 1 
 AND  typeId = 0

我试过这个:
rets = Article.objects.order_by("-Fid").values('Fid')
kwargs['keyId'] = 1
kwargs['typeId'] = 0
re =  Article.objects.filter(Fid__in=rets).filter(**kwargs).values()

但它不起作用。谁能解释我如何做到这一点?

最佳答案

在你的情况下,我想你可以 resort to raw SQL (未经测试)。请注意,使用原始 SQL 您必须知道真实的表名和列名(只需先直接在数据库上测试该语句,看看它是否有效)。

例如:

Article.objects.raw("""SELECT * from (
                         SELECT * FROM yourapp_article 
                         ORDER BY fid DESC
                         LIMIT 0, 200
                       ) AS q1 WHERE key_id=1 AND type_id=0""")

[更新]

wuent 写道:

thanks for your help. But the raw SQL is not my wanted. I need keep my program orm style. – wuent



如果您习惯了更强大/更一致的 ORM,例如 SQLAlchemy甚至 peewee ,放弃希望。 Django ORM 有一个非常残缺的设计,AFAIK 你不能用它来做这种事情 - 这个答案的第一个版本开始于对此的咆哮。

再次查看您的查询,我的印象是您不需要子查询,请尝试直接查询表 - 我猜结果是一样的。

关于django - 如何使用子查询 django ORM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14250206/

相关文章:

django - 如何使用 django 和 selenium/grid 模拟并行多用户可用性测试?

reactjs - 有没有办法将 Apache 配置为自动识别 Django 与 React 的 URL,而无需对每个端点进行硬编码?

mysql - 我如何编写一个需要可操作的 mySQL 数据库的测试模块?

mysql - 在 Eloquent 中使用MYSQL AES_DECRYPT函数?

postgresql - 嵌套选择使用计数来计算 Postgres 中的每一行

javascript - AJAX、Django 和 HTML 选择?

python - Django 的重定向应用程序不适用于 URL 参数

mysql - 从另一个查询的结果中查询第二个 mysql 表

java - Hibernate:使用别名获取列

MySQL 嵌套选择 : am I able to use any data from outer select?