Questo bug mi perseguitava da molto tempo, quindi ho deciso di approfondire e provare a risolverlo una volta per tutte.
Causa principale:il problema SAVEPOINT è un bug che si verifica solo in MySQL-Python
connettore.
Correzione:utilizza altri driver MySQL per Python (ad es. mysqlclient
).
Dettagli/Risultati:
- Ho provato i binari MySQL in Homebrew, MAMP e XAMPP per Mac.
- Ho provato varie versioni di MySQL, 5.6 (
libmysqlclient.18.dylib
) e 5.7 (libmysqlclient.20.dylib
). - Ho provato vari driver MySQL di Python.
Nessuna relazione trovata variando i binari/versioni di MySQL. Ma ho ristretto il problema testando vari driver MySQL comunemente usati in Python:
-
MySQLdb (connettore di database ampiamente utilizzato ma vecchio, l'ultimo commit è stato 7 anni fa!):
$ pip install MySQL-python
-
mysqlclient (versione moderna di
MySQL-python
, ma con molte correzioni di bug e miglioramenti):$ pip install mysqlclient
-
PyMySQL (driver di database MySQL Python puro):
$ pip install PyMySQL
Quindi, aggiungi
settings.py
(appena sotto ilimport os
):try: import pymysql pymysql.install_as_MySQLdb() except: pass
-
Connettore MySQL-Python di Oracle (driver di database MySQL Python puro):
$ pip install mysql-connector-python-rf
Quindi, modifica il
ENGINE
del database configurazione insettings.py
:'ENGINE': 'mysql.connector.django',
Il problema SAVEPOINT si verifica solo quando si utilizza MySQL-python connettore (driver n. 1), ma non negli altri (driver n. 2, n. 3, n. 4). Nel mio caso, avevo scelto mysqlclient . Il problema è sparito ora.