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 PyMySQL
Lä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-rf
Redigera sedan databasens
ENGINE
konfiguration 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.