나는 장고 1.3.1, 파이썬 2.6과 MySQL 5.5.20을 가지고있다. 설정 도구의 init_command
은 SET storage_engine=INNODB
으로 설정됩니다.django가 첫 번째 쿼리에서 암시 적 트랜잭션을 생성합니까?
나는 다음과 같은 상황이 :
장고 쉘 I :
./manage.py shell
(InteractiveConsole)
>>> import fruits.models as m
>>> m.Fruit(name="apple").save()
>>> m.Fruit.objects.get(pk=1)
<Fruit: apple>
이제
class Fruit(models.Model):
name = models.CharField(max_length=50)
def __unicode__(self):
return self.name
내가이 장고 셸을 열고 다음을 입력
모델을 고려
d jango shell II :
./manage.py shell
(InteractiveConsole)
>>> import fruits.models as m
>>> m.Fruit.objects.get(pk=1)
<Fruit: apple>
지금까지 그렇게 좋았습니다.
>>> 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이 "거짓말"하지 않도록해야합니다.
당신은 최선을 다하고 읽기 분리 레벨을 휴식을 취할 수 있습니다 : http://stackoverflow.com/questions
는 settings.py에서이 매개 변수를 설정해야합니다 귀하의 장고 프로젝트에 대한 MySQL의에 읽기 최선을 다하고 격리 수준을 설정하려면/2280779/django-transaction-isolation-level-in-mysql-postgresql (Peter Lundberg의 답변 참조) – danihp그러나 "peach"는 커밋됩니다. 쉘 2를 종료하고 다시 실행하면 –
@danihp가 표시됩니다. 그렇습니다. 실제로 맞습니다. 이것은 MySQL의 문제이며 django입니다. 이것을 답으로 써 주시면 받아 들일 것입니다. 감사. –