2011-02-08 10 views
1

私は(./manage.py shell_plus経由で)対話型シェルから実行しているよDjangoのコマンドが新しく追加されたデータ

c = MyModel.objects.count() 
while True 
    assert MyModel.objects.count() == c 
    sleep(1) 

、その後、私は管理者に移動し、新しいmymodelというオブジェクトを追加に気付いていません。アサーションは失敗すると思いますが、古いレコード(新しいレコードに気づいていない)を取得し続けます。

原因を知っていますか? 私の最初の容疑者はキャッシュシステムですが、テストする方法はわかりません。
これを克服してクエリで新しいレコードに気付く方法を知っていますか?

ありがとうございます...

答えて

0

これはトランザクションに関する問題のようです。 process_recordsを呼び出すたびに手動でコミットするようにスクリプトを設定することをお勧めします。

transaction docsを参照してください。

+0

私のエンドレススクリプトはデータの書き込みに問題がありません。新しいデータに気づくのに問題があります。 簡略化されたケースを表示するために質問を更新します – Iftah

+0

あなたが正しいと思われ、それはトランザクションに関連しています。私は同様の質問http://stackoverflow.com/questions/1886909/how-to-disable-django-query-cacheを見つけ、transaction.commit()トリックが私のために働いています。私が突然実行した後、読み込みは新しいデータを返します。私はtransactions.commitがdbへの書き込みに影響を与えていると思っていました。 – Iftah

+0

@Iftah:トランザクションの隔離で読んでください:トランザクションは独立していなければならないので、開いている間は他のトランザクションによって書き込まれたデータは見えません。 –

関連する問題