0

コードがあるとしましょう:

obj = MyUser.objects.get(pk=1)

name = obj.name
age = obj.age
email = obj.email
phone = obj.phone
city = obj.city

だから私は持っていobjます。これは MyUser オブジェクトに関するすべての情報を含む配列ですか、それとも単なる参照ですか?

興味深いのはname = obj.name、最初のリクエストを DB に送信することです。

age = obj.age2 番目のリクエストを DB に送信し、

email = obj.email3 番目のリクエストを DB に送信し、

phone = obj.phone4 番目のリクエストを DB に送信し、

city = obj.city5 番目の要求を DB に送信します

または、要求が 1 つだけの場合、obj = MyUser.objects.get(pk=1).

システムのパフォーマンスに影響を与えることは秘密ではありませんので、非常に興味深い質問です。

ありがとう!

4

1 に答える 1

1

インスタンス化されたときに値がデータベースから初期化されるオブジェクトです。デフォルトでは、Django は行全体を選択し、列の値を使用してオブジェクトをインスタンス化します。

あなたが説明した方法でそれを行うのは非常に奇妙で、非常に非効率的です。また、クエリセットを要求した場合はどうなるでしょうか? 行ごとに列ごとに 1 つのクエリ?

もちろん、 orを使用して関心のある列だけを取得したり、 or を使用valuesして一部のフィールドを遅延させたオブジェクトを取得したりして、特定の列のみを要求することもできます。values_listdeferonly

Django に何をしているのかを尋ねることができることに注意してください - シェルで、デバッグモードで、

from django.db import connection
print connection.queries

これにより、そのシェル セッションのその時点までのすべての db クエリのリストが表示されます。

于 2011-11-24T09:07:38.867 に答える