如何编写等同于" WHERE a0或a1或a2 ..."的查询Django中的条款

时间:2015-07-14 23:44:09

标签: python sql django

在django中,我想使用一些复杂的查询来提高性能。 我想要做的就是以下内容。

query = Q()  # EDITED: incorrect "None" replace to "Q()"

# we don't know conditions length until the program runs.
for x, y in conditions:
    query |= Q(x=x, y=y)
coordinates = Coordinate.objects.filter(query)

for x, y in conditions:
    c = coordinates.get(x=x, y=y)
    print(c)  # execute related to "c"

效果很好。 但是,我怀疑这是最好的。我认为Django可能有更多有用和有效的查询。 有谁知道的方式?

2 个答案:

答案 0 :(得分:2)

在您的情况下,print函数的每次调用都在进行数据库查询!

查询将延迟执行设置为运行时间。此链接说明如何: https://docs.djangoproject.com/en/1.8/topics/db/queries/#querysets-are-lazy

首先在for循环之外执行查询。然后迭代for循环中的结果并打印它们。

答案 1 :(得分:0)

通过以下方式解决。

d = dict(((cd.x, cd.y), cd) for cd in coordinates.all())

for x, y in conditions:
    c = d[(x, y)]
    print(c)