【发布时间】:2012-01-20 07:18:14
【问题描述】:
我在PostgreSQL 中有一个 SQL 查询,我想将它翻译成 Django。
select * from main_document
where id in (
select distinct on (document_id) document_id
from main_tokenindex
where token in('token1', 'token2')
order by document_id, relevance desc
) LIMIT 100
我有 2 个表:Document 和 TokenIndex。一对多关系,一个token可以在多个文档中。
到目前为止我有这个:
terms = []
ids = [doc.document_id for doc in TokenIndex.objects.filter(token__in = terms).
distinct('document__id').order_by("-relevance")]
list(Document.objects.filter(pk__in=ids))[:max_res]
如您所见,问题是我要去数据库获取 id 列表,然后再返回获取文档。这是低效的,因为我可能要处理数百万个文档 ID,而我只对一小部分感兴趣(由 SQL 中的 max_res 变量和 LIMIT 定义。
如何将 SQL 查询转换为 Django?我希望 Django 的查询与我手写的查询一样,例如它只返回 100 个文档,而不是 1.000.000 个文档 ID,然后是 100 个文档。
【问题讨论】:
标签: sql django django-orm