在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可能有更多有用和有效的查询。 有谁知道的方式?
答案 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)