Ce bug m'a hanté pendant longtemps, j'ai donc décidé de creuser plus loin et d'essayer de le résoudre une fois pour toutes.
Cause principale :le problème SAVEPOINT est un bogue qui se produit uniquement dans MySQL-Python
connecteur.
Correction :Utilisez d'autres pilotes MySQL pour Python (par exemple, mysqlclient
).
Détails/Conclusions :
- J'ai essayé les fichiers binaires MySQL dans Homebrew, MAMP et XAMPP pour Mac.
- J'ai essayé différentes versions de MySQL, 5.6 (
libmysqlclient.18.dylib
) et 5.7 (libmysqlclient.20.dylib
). - Essayé plusieurs pilotes MySQL de Python.
Aucune relation trouvée en faisant varier les binaires/versions MySQL. Mais j'ai réduit le problème en testant divers pilotes MySQL couramment utilisés en Python :
-
MySQLdb (connecteur de base de données largement utilisé mais ancien, le dernier commit remonte à 7 ans !) :
$ pip install MySQL-python
-
mysqlclient (version moderne de
MySQL-python
, mais avec de nombreuses corrections de bugs et améliorations) :$ pip install mysqlclient
-
PyMySQL (pilote de base de données Python MySQL pur) :
$ pip install PyMySQL
Ensuite, ajoutez
settings.py
(juste en dessous duimport os
):try: import pymysql pymysql.install_as_MySQLdb() except: pass
-
MySQL-Connector-Python par Oracle (pilote de base de données Python MySQL pur) :
$ pip install mysql-connector-python-rf
Ensuite, modifiez le
ENGINE
de la base de données configuration danssettings.py
:'ENGINE': 'mysql.connector.django',
Le problème SAVEPOINT se produit uniquement lors de l'utilisation de MySQL-python connecteur (pilote #1), mais pas dans les autres (pilotes #2, #3, #4). Dans mon cas, j'avais choisi le mysqlclient . Le problème est résolu maintenant.