8

以下两个调用是否解析为 Django 中的等效 SQL 查询?

链接多个调用

Model.objects \
.filter(arg1=foo) \
.filter(arg2=bar) \
...

将所有参数包装在一起:

Model.objects \
.filter(arg1=foo, arg2=bar)

我希望代码可读(过滤器调用比我展示的要多),但前提是不牺牲性能。

4

2 回答 2

12

更新:

无视这个答案。看到这个更好,正确的答案。感谢@Sam的提醒。

老答案:

以下两个调用是否解析为 Django 中的等效 SQL 查询?

简短的回答:是的。它们将生成等效查询。

我用我正在使用的模型验证了这一点。产生的查询在功能上是相同的。不同的filter条件AND在查询中一起编辑。

我希望代码可读(过滤器调用比我展示的要多),但前提是不牺牲性能。

实现可读性的一种方法是使用字典来收集所有过滤条件。例如

conditions = dict(arg1 = foo, arg2 = bar, ....)
conditions.update(argN = baz)

Model.objects.filter(**conditions)
于 2010-09-17T07:17:39.363 回答
7

除了 Manoj 的回答之外,您还可以分析为QuerySet对象生成的 sql:

result1 = SomeModel.objects.filter(field1=100, field2=200)
print "Result1", results1.query

result2 = SomeModel.objects.filter(field1=100).filter(field2=200)
print "Result2", result2.query
于 2010-09-17T07:28:23.977 回答