I have a Django application.
Solely in terms of ORM/query/DB performance, are the following ways of retrieving an object equivalent (i.e. in a situation where there was just a single Car
object for owner_id = pk
in the table currently):
Car.objects.get(owner_id=pk)
Car.objects.filter(owner_id=pk).latest('id')
owner
is a foreign key relationship, hence is a DB index. Are the SQL queries produced equivalent (or the same)?
Since you are using the Foreign key, get()
and filter()
will give the same performance.
How you see get()
objs = Car.objects.get(owner_id=pk)
How get()
is actually implemented by Django
objs = Car.objects.filter(owner_id=pk)
if len(objs) == 1:
obj = objs[0]
else if len(objs) > 1:
# Multiple objects returned
else:
# we have no object! do something
pass
For your case, I would recommend using get()
because
you can be sure that only one element is returned
it is designed for this purpose