Я получаю странное поведение в Django 1.3 и MySQL. У меня есть Модель с полем object_id
, которое действует как первичный ключ (в отличие от автоинкремента). Я добавляю объект со следующим фрагментом кода:
Record.objects.create(object_id = '1')
Это работает нормально. Если я попытаюсь добавить тот же объект снова (делая это из оболочки), я получу IntegrityError: (1062, "Duplicate entry '1' for key 'PRIMARY'")
. Это просто отлично.
Однако теперь есть побочный эффект: если я попытаюсь удалить ту же запись из другого потока / процесса, даже если я просто попытаюсь удалить ее с помощью оболочки MySQL, я получу ошибку транзакции (Lock wait timeout exceeded; try restarting transaction
) , Следует отметить, что, если я просто создаю объект один раз (без ошибки целостности), эта проблема не возникает. Кроме того, он отлично работает при удалении из того же потока (возможно, потому что он использует то же соединение).
Ситуацию можно временно разрешить, если я использую django.db.close_connection()
, но это не так. Я пытался использовать ручное управление транзакциями и откат, но это не помогло.
Есть идеи, что пошло не так? Это ошибка в Django ORM?