По моему опыту, эти ошибки происходят следующим образом:
try:
code_that_executes_bad_query()
# transaction on DB is now bad
except:
pass
# transaction on db is still bad
code_that_executes_working_query() # raises transaction error
Во втором запросе нет ничего плохого, но, поскольку обнаружена реальная ошибка, второй запрос вызывает ошибку (гораздо менее информативную).
edit: это происходит только в том случае, если предложение except
перехватывает IntegrityError
(или любое другое исключение базы данных низкого уровня). Если вы поймаете что-то вроде DoesNotExist
, эта ошибка не возникнет, потому что DoesNotExist
не повреждает сделка.
Урок здесь - не пытайтесь / кроме / проходите.