Это, безусловно, связано с автоматической фиксацией / блокировкой таблицы.
Если mysqldb реализует спецификацию dbapi2, вероятно, соединение будет работать как одна непрерывная транзакция. Когда вы говорите: 'running in autocommit mode'
: вы имеете в виду сам MySQL или модуль mysqldb? Или Джанго?
Непостоянная передача прекрасно объясняет поведение, которое вы получаете:
i) соединение, реализованное как одна отдельная транзакция в mysqldb (по умолчанию, вероятно)
ii) не открывать / закрывать соединения только при необходимости, но (повторно) использовать одно (или несколько) постоянных соединений с базой данных (я думаю, это может быть унаследовано от Django-архитектуры).
ii) ваш выбор («чтение») вызывает «простую блокировку чтения» для таблицы (что означает, что другие соединения все еще могут «читать» эту таблицу, но соединения, желающие «записать данные», могут » t (немедленно), потому что эта блокировка не позволяет им получить «эксклюзивную блокировку» (необходимую «для записи») для этой таблицы, поэтому запись откладывается на неопределенное время (до тех пор, пока она не сможет получить (короткую) эксклюзивную блокировку для таблицы для записи - когда вы закрываете соединение или фиксируете вручную).
Я бы сделал следующее в вашем случае:
- выясните, какие блокировки таблиц в вашей базе данных во время сценария выше
- читайте о Django и транзакциях здесь . Краткий обзор предлагает использовать стандартную функциональность Django, что неявно вызывает коммиты. Это означает, что отправка SQL вручную может быть невозможна (вставить, обновить ...).