私はPythonの専門家ではなく、djangoが次のクエリを最適化する方法に興味があります
Model.objects.filter(field = 'abc')[0]
どういうわけか、djangoは' limit 1
'のようにSQLクエリに''をインテリジェントに追加します' select * from model where field = 'abc' limit 1
'
これは、Model.objects.filter(...)
実際にはリストを返さず、クエリセットオブジェクトを返すためです。を実行すると、クエリセットのメソッドがqset[0]
呼び出され、が追加されて実行されます。これがそのメソッドのソースです; 結果がすでにキャッシュされているかどうかなど、さまざまな場合のロジックがあります。__getitem__
limit 1