Този бъг ме преследваше дълго време, така че реших да разровя по-нататък и да се опитам да го разреша веднъж завинаги.
Основна причина:Проблемът със 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 . Проблемът вече е изчезнал.