1

Django (価値のあるバージョン 1.1.4) は、データベース テーブルの 1 つにあるアイテムを任意に見つけられません。問題のオブジェクト マネージャはデフォルトのものです。以下に 2 つの例を示します。1 つ目は問題の範囲を示し、2 つ目は特定の事例を示しています。

ジャンゴ:

In [5]: LocalStore.objects.all().count()
Out[5]: 1466

MySQL:

mysql> select count(*) from stores_localstore;
+----------+
| count(*) |
+----------+
|     1553 | 
+----------+
1 row in set (0.00 sec)

それ自体で十分に奇妙です。DB 内にあるが表示されない単一のオブジェクトの例を次に示します。

ジャンゴ:

In [37]: LocalStore.objects.filter(id=474361)
Out[37]: []
In [39]: print LocalStore.objects.filter(id=474361).query
SELECT `stores_localstore`.`id`, `stores_localstore`.`cust_id`,
`stores_localstore`.`name`, `stores_localstore`.`lat`, `stores_localstore`.`lng`,
`stores_localstore`.`addr1`, `stores_localstore`.`addr2`, `stores_localstore`.`city`, 
`stores_localstore`.`email`, `stores_localstore`.`fax`, `stores_localstore`.`phone`, 
`stores_localstore`.`state`, `stores_localstore`.`url`, `stores_localstore`.`zip` FROM
`stores_localstore` WHERE `stores_localstore`.`id` = 474361 

プライバシー上の理由から、MySQL クエリの正確な結果は示したくありませんが、データベースの行が返されることだけを述べておけば十分でしょう。

これは、非常に奇妙な動作であり、Django ORM の奥深くにある潜在的なバグであると私は思います。しかし、明らかなことを見落としている可能性もあります。それは何でしょうか?

4

2 に答える 2

1

Django は、接続しているデータベースとは別のデータベースを見ているか、何らかの方法でキャッシュするように Django に指示しています。Django はデータを「失いません」。

django が正しいデータベースに接続されていることを検証します。

from django import db
db.settings.DATABASES.get('default')
于 2012-05-17T12:27:45.610 に答える
0

おそらく、MySQLの分離レベルはREPEATEABLE READ(innodbのデフォルト)であり、DjangoシェルのDB接続は、行の新しい挿入よりも前のトランザクションにあります(手動のトランザクション管理または接続プールの使用によって引き起こされます)。など)、古い行の期限切れのスナップショットを保持します。
それからあなたは幻の読書を経験しました。

于 2012-05-17T13:13:11.147 に答える