Вкратце:
MySQLdb использует AUTOCOMMIT=0
То есть каждая операция изменения данных должна завершаться COMMIT/ROLLBACK для фиксации или отката изменений. Если вы раньше использовали расширения PHP (PDO, Mysqli) или Ruby для доступа к MySQL, то наверное будете немного удивлены, поскольку практически во всех драйверах доступа к БД при подключении значение AUTOCOMMIT не меняется (а по умолчанию в MySQL оно задано как AUTOCOMMIT=1).
MySQL по умолчанию использует уровень изоляции транзакций REPEATABLE-READ
А в PosgreSQL или Oracle используется по умолчанию READ-COMMITTED.
На практике это означает, что две разные транзакции не знают что происходит с данными которые изменила (COMMIT) одна из транзакций. Смотрите пример.
Пути решения проблемы:
Добавить в my.cnf:transaction-isolation = READ-COMMITTED
или в settings.py:DATABASE_OPTIONS = {
"init_command": "SET storage_engine=INNODB, SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED",
}
Как это проявляется на практике читайте в оригинальной статье:
http://habrahabr.ru/post/144161/