如何强制Django使用“ JOIN VALUES”

时间:2018-09-18 19:13:29

标签: django django-orm

我遇到了性能问题,需要替换查询语句的一部分。现在,我有以下内容:

select count(*) FROM "mytable" WHERE "field" IN ('v1', 'v2', ..., 'vN');

这可以翻译成Django ORM:

Mytable.objects.all().filter(field__in=[myvalues]).count()

我需要执行以下操作:

select count(*) FROM "mytable" JOIN (values ('v1', 'v2', ..., 'vN')) as lookup(value) on lookup.value = "mytable".field;

是否可以将其添加到ORM?我需要使用ORM,因为我已经有了其他过滤器。最坏的情况是我想到获取查询字符串并手动添加...

我正在使用Postgresql 9.6

1 个答案:

答案 0 :(得分:0)

一遍又一遍的文档后,我发现了一种方法。我什至发现a patch不久前没有合并。

它实际上并没有进行连接,但是比直接使用View controller-based status bar appearance更快。

我正在执行的是执行Django 2.0中引入的RawSQL(),结果我再次执行YES

这是一个代码示例:

__in

现在只需几毫秒而不是几分钟!