>>> Anything.objects.create(title='test')
<Anything: test>
>>> Anything.objects.get(title='test')
DoesNotExist: Anything matching query does not exist.
>>> exit()
。。。重新打开shell。。。你知道吗
>>> Anything.objects.get(title='test')
<Anything: test>
超级难堪。运行Python 2.7.3;Django 1.5.4;MySQL 5.5(innodb),Ubuntu 12.04。你知道吗
此外,首先打开pythonshell,然后对mysql运行insert语句,会导致类似的情况,即数据库中存在记录,但shell找不到它。你知道吗
转储mysql日志显示了您所期望的:一个insert语句,后跟一个select;它似乎在某种程度上与数据库的一个过时版本相冲突——这个版本似乎是在shell实例的开头建立的!你知道吗
直接对数据库运行顺序insert和select语句会产生类似的结果;因为shell是实例化的,所以无法访问新信息。你知道吗
仍在追查:
>>> t = TagManager.objects.create(title='test')
>>> t
<TagManager: test>
>>> t.id
1L
>>> TagManager.objects.get(title='test')
<TagManager: test>
>>> t2 = TagManager.objects.create(title='test2')
>>> TagManager.objects.get(title='test2')
DoesNotExist: TagManager matching query does not exist.
>>> t2.id
2L
>>> TagManager.objects.get(title='test2')
DoesNotExist: TagManager matching query does not exist.
>>> TagManager.objects.get(title='test')
<TagManager: test>
退出shell。。。你知道吗
>>> TagManager.objects.get(title='test2')
<TagManager: test2>
>>> TagManager.objects.create(title='test3')
<TagManager: test3>
>>> t.id
3L
>>> TagManager.objects.get(title='test3')
DoesNotExist: TagManager matching query does not exist.
>>> t = TagManager.objects.create(title='test4')
>>> t
<TagManager: test4>
>>> t.id
4L
>>> TagManager.objects.get(title='test4')
DoesNotExist: TagManager matching query does not exist.
有没有可能任何东西。物体指向未按预期方式运行的管理器实例(通过在create方法中保存对象)?你知道吗
如果不是,那么我希望您的shell在一个没有提交的事务中运行。你也许会明白
在调用create()之后执行。你知道吗
原来这是由于MySQL中默认的可重复读取事务隔离级别造成的
http://django.readthedocs.org/en/latest/topics/db/transactions.html#using-a-high-isolation-level
将mysql conf中的事务隔离级别更改为READ COMMITTED可以解决这个问题。你知道吗
相关问题 更多 >
编程相关推荐