为什么Django ORM找不到我数据库中清楚的项目?

时间:2012-05-17 12:07:13

标签: mysql django orm django-models

Django(版本1.1.4,它的价值)是任意找不到我的数据库表中的项目。有问题的对象管理器是默认的。接下来是两个例子,第一个显示问题的范围,第二个提供它的特定实例。

Django的:

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中但没有出现的单个对象的例子:

Django的:

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内部深处的一个错误。但也有可能我忽略了一些显而易见的事情。那可能是什么?

2 个答案:

答案 0 :(得分:1)

Django正在查看与您连接的数据库不同的数据库,或者您告诉django以某种方式缓存。 Django不会“丢失”数据。

验证django是否连接到正确的数据库:

from django import db
db.settings.DATABASES.get('default')

答案 1 :(得分:0)

你的MySQL的隔离级别可能是REPEATEABLE READ(这是innodb的默认值),并且Django shell中的数据库连接比新插入的行更早处于事务中(由手动事务管理或使用引起)某些连接池等)并且仍保留旧行的过期快照 然后你经历了幻读。