Denna bugg förföljde mig länge, så jag bestämde mig för att gräva vidare och försöka lösa det en gång för alla.
Rotorsak:SAVEPOINT-problemet är en bugg som endast inträffar i MySQL-Python kontakt.
Fix:Använd andra MySQL-drivrutiner för Python (t.ex. mysqlclient ).
Detaljer/resultat:
- Testat MySQL-binärfilerna i Homebrew, MAMP och XAMPP för Mac.
- Provat olika MySQL-versioner, 5.6 (
libmysqlclient.18.dylib) och 5.7 (libmysqlclient.20.dylib). - Testat olika Pythons MySQL-drivrutiner.
Inga relationer hittades genom att variera MySQL-binärfilerna/versionerna. Men jag har minskat problemet genom att testa olika MySQL-drivrutiner som ofta används i Python:
-
MySQLdb (flitigt använt men gammal databaskoppling, senaste commit var för 7 år sedan!):
$ pip install MySQL-python -
mysqlclient (modern version av
MySQL-python, men med många buggfixar och förbättringar):$ pip install mysqlclient -
PyMySQL (ren Python MySQL-databasdrivrutin):
$ pip install PyMySQLLägg sedan till
settings.py(precis underimport os):try: import pymysql pymysql.install_as_MySQLdb() except: pass -
MySQL-Connector-Python av Oracle (ren Python MySQL-databasdrivrutin):
$ pip install mysql-connector-python-rfRedigera sedan databasens
ENGINEkonfiguration isettings.py:'ENGINE': 'mysql.connector.django',
SAVEPOINT-problemet uppstår endast när du använder MySQL-python kontakt (#1 drivrutin), men inte i de andra (#2, #3, #4 drivrutiner). På mitt fall hade jag valt mysqlclient . Problemet är borta nu.