0

ユーザーが を介して django シェルに入ると、データベースが静的なままになるのはなぜpython manage.py runserverですか? 例えば:

>>> from userprofile.models import UserProfile
>>> up=UserProfile.objects.get(id=4)
>>> up.get_jobs_applied_for()
[<JobApplication: david - Editor>, <JobApplication: david - Assistant Director>]
# delete entries in the mysql database
>>> up.get_jobs_applied_for()
[<JobApplication: david - Editor>, <JobApplication: david - Assistant Director>]
# but the results do not reflect that

そして呼び出されるメソッド:

# in `UserProfile` class
def get_jobs_applied_for(self):
    jobs_applied_for = self.jobapplication_set.order_by('-timestamp')
    return jobs_applied_for

リアルタイムでデータベースにクエリを実行しないのはなぜですか?

4

2 に答える 2

1

Matthew Schinckel が尋ねたように、削除はいつ、どこで行われますか? 2 番目の の前に別のプロセスで発生し、>>> up.get_jobs_applied_for()分離レベルを に設定して MySQL を使用しているREPEATABLE READ場合、MySQL DB は削除前の以前のスナップショットを提供します。(質問のコードがトランザクション全体で実行されている場合、たとえば、管理されたトランザクションや一部の MySQL 接続プールで)

また、django.db.connection.queries行間を使用して、Django が実際に DB からクエリを実行しようとするかどうかを確認できます。

于 2012-05-27T06:02:23.623 に答える
-1

Django は、クエリの実行が必要な何かを最初に実行したときにのみ QuerySet に値を設定します。その後、同じ結果セットがメモリに保持されます。order_by() は、データベースに対して別のクエリを実行することを強制しません。

于 2012-05-27T04:02:46.457 に答える