我有django 1.3.1,python2.6和MySQL 5.5.20。在settings.py中的 init_command
設置爲SET storage_engine=INNODB
。django是否在第一個查詢中創建隱式事務?
我有以下情況:
考慮模型:
class Fruit(models.Model):
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name
現在我打開兩個Django的炮彈和類型:
Django的殼我:
./manage.py shell
(InteractiveConsole)
>>> import fruits.models as m
>>> m.Fruit(name="apple").save()
>>> m.Fruit.objects.get(pk=1)
<Fruit: apple>
d詹殼II:
./manage.py shell
(InteractiveConsole)
>>> import fruits.models as m
>>> m.Fruit.objects.get(pk=1)
<Fruit: apple>
到目前爲止好。現在,我繼續在殼I型:
>>> m.Fruit(name="peach").save()
>>> m.Fruit.objects.get(pk=2)
<Fruit: peach>
Qestion:爲什麼鍵入在外殼下面II不找對象?
>>> m.Fruit.objects.get(pk=2)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "..../django/db/models/manager.py", line 132, in get
return self.get_query_set().get(*args, **kwargs)
File "..../django/db/models/query.py", line 349, in get
% self.model._meta.object_name)
DoesNotExist: Fruit matching query does not exist.
我發現做外殼II有「新面貌」的唯一辦法是這樣的:
>>> from django.db import transaction
>>> transaction.enter_transaction_management()
>>> transaction.rollback()
,我需要roolback()
每個如果我想我查詢水果的時間確保orm不會「撒謊」。
你可以放鬆隔離級別讀COMMITED:http://stackoverflow.com/questions/2280779/django-transaction-isolation-level-in-mysql-postgresql(請參閱Peter Lundberg答案) – danihp
但是「桃子」已經提交。如果我退出shell 2並再次運行它,我會看到它 –
@danihp,是的,你其實是對的。這是MySQL問題和django的問題。請寫下這個答案,我會接受它。謝謝。 –