Исходя из моего предыдущего вопроса , я использую MySQL с движком InnoDB и настроил простую тестовую таблицу. Когда я запускаю следующий код:
c.execute("""insert into test(text) values('test1')""")
conn.commit()
c.execute("""insert into test(text) values('test2')""")
# Raise an exception to simulate an error
raise Exception('spam', 'eggs')
c.execute("""insert into test(text) values('test3')""")
conn.commit()
Я вижу запись только для test1 в базе данных, как и ожидалось.
После создания соответствующего класса модели и запуска эквивалентного кода в Django (я указал TransactionMiddleware в settings.py):
def transaction_test(request):
t1 = Test(text='test1')
t2 = Test(text='test2')
t1.save()
# Raise an exception to simulate an error
raise Exception('spam', 'eggs')
t2.save()
return render_to_response('index.html')
Тогда я все еще вижу запись для «test1» в таблице, тогда как я ожидал, что вся транзакция откатится, включая сохранение «test1», согласно описанию, приведенному в документации для TransactionMiddleware
Кто-нибудь еще видел это? Есть ли что-то, что мне не хватает в настройках Django?