Are the following two calls resolved to the equivalent SQL query in Django?
Chaining multiple calls
Model.objects \
.filter(arg1=foo) \
.filter(arg2=bar) \
...
Wrapping all the args together:
Model.objects \
.filter(arg1=foo, arg2=bar)
I'd like code to be readable (there are MANY more filter calls than I've shown), but only if there's no sacrifice to performance.
Disregard this answer. See this better, correct answer. Thanks @Sam for the heads up.
Are the following two calls resolved to the equivalent SQL query in Django?
Short answer: yes. They will generate equivalent queries.
I verified this with a model I am using. the queries produced are functionally identical. The different filter
conditions are AND
ed together in the query.
I'd like code to be readable (there are MANY more filter calls than I've shown), but only if there's no sacrifice to performance.
One way to achieve readability is to use a dictionary for collecting all filter conditions. For e.g.
conditions = dict(arg1 = foo, arg2 = bar, ....)
conditions.update(argN = baz)
Model.objects.filter(**conditions)
In addition to Manoj's answer, here's how you can analyze the sql generated for a QuerySet
object:
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With