Този бъг ме преследваше дълго време, така че реших да разровя по-нататък и да се опитам да го разреша веднъж завинаги.
Основна причина:Проблемът със SAVEPOINT е грешка, която се появява само в MySQL-Python
конектор.
Поправка:Използвайте други MySQL драйвери за Python (напр. mysqlclient
).
Подробности/Констатации:
- Изпробвах двоичните файлове на MySQL в Homebrew, MAMP и XAMPP за Mac.
- Изпробвах различни версии на MySQL, 5.6 (
libmysqlclient.18.dylib
) и 5.7 (libmysqlclient.20.dylib
). - Изпробвах различни драйвери за MySQL на Python.
Не са открити връзки чрез промяна на двоичните файлове/версиите на MySQL. Но стесних проблема, като тествах различни драйвери на MySQL, често използвани в Python:
-
MySQLdb (широко използван, но стар конектор за база данни, последното записване беше преди 7 години!):
$ pip install MySQL-python
-
mysqlclient (модерна версия на
MySQL-python
, но с много корекции на грешки и подобрения):$ pip install mysqlclient
-
PyMySQL (чист драйвер за Python MySQL база данни):
$ pip install PyMySQL
След това добавете в
settings.py
(точно подimport os
):try: import pymysql pymysql.install_as_MySQLdb() except: pass
-
MySQL-Connector-Python от Oracle (чист Python MySQL драйвер за база данни):
$ pip install mysql-connector-python-rf
След това редактирайте
ENGINE
на базата данни конфигурация вsettings.py
:'ENGINE': 'mysql.connector.django',
Проблемът със SAVEPOINT възниква само при използване на MySQL-python конектор (драйвер №1), но не и в останалите (драйвери №2, №3, №4). В моя случай бях избрал mysqlclient . Проблемът вече е изчезнал.