2

save()Djangoオブジェクトでメソッドが呼び出されるたびに、Djangoは2つのクエリINSERTを1つと1つ実行しSELECTます。私の場合、これは、各クエリが高価な特定の場所を除いて便利です。オブジェクトを返す必要がないことを時々述べる方法に関するアイデア-SELECT必要ありません。

また、私はdjango-mssqlを使用して接続していますが、この問題はMySQLには存在しないようです。

編集:より良い説明

h = Human()
h.name='John Foo'
print h.id # Returns None, No insert has been done therefore no id is available
h.save()
print h.id # Returns the ID, an insert has taken place and also a select statement to return the id

時々私はリトリューニングIDを必要とせず、挿入するだけです

4

3 に答える 3

0

または属性save()を持つメソッドを使用してみてください。この属性を使用すると、djangoはレコードの存在を認識し、追加のクエリを実行しません。force_insertforce_update

于 2011-06-07T14:12:21.820 に答える
0

40insの答えは正しかったが、おそらくそれはより高いコストがかかるかもしれない...

djangoがsave()を実行するときは、オブジェクトが新しいものか既存のものかを確認する必要がありました。そのため、データベースにアクセスして、関連するobjextが存在するかどうかを確認します。はいの場合、UPDATEを実行します。そうでない場合は、 ISERTを実行します。

ここからドキュメンタリーをチェックしてください...

force_insertまたはforce_updateを使用できますが、既存のエントリを更新する代わりに重複エントリを作成するなど、重大なデータ整合性の問題を引き起こす可能性があります...

したがって、forceを使用する場合は、それがINSERTであるかUPDATEであるかを確認する必要があります。

于 2011-06-07T15:40:21.637 に答える
0

追加の選択は、挿入されたばかりのIDを判別するためにテーブルからID値を取得するdjango-mssqlバックエンドです。この選択が遅い場合は、SELECT CAST(IDENT_CURRENT(*table_name*) as bigint)呼び出しのみを行っているため、SQLサーバー/構成に問題があります。

于 2012-01-18T21:29:08.530 に答える