Dieser Fehler verfolgte mich lange Zeit, also beschloss ich, weiter zu graben und zu versuchen, ihn ein für alle Mal zu lösen.
Hauptursache:Das SAVEPOINT-Problem ist ein Fehler, der nur in MySQL-Python
auftritt Stecker.
Behebung:Verwenden Sie andere MySQL-Treiber für Python (z. B. mysqlclient
).
Details/Ergebnisse:
- Die MySQL-Binärdateien in Homebrew, MAMP und XAMPP für Mac ausprobiert.
- Verschiedene MySQL-Versionen ausprobiert, 5.6 (
libmysqlclient.18.dylib
) und 5.7 (libmysqlclient.20.dylib
). - Verschiedene MySQL-Treiber von Python ausprobiert.
Beim Variieren der MySQL-Binärdateien/-Versionen wurden keine Beziehungen gefunden. Aber ich habe das Problem eingegrenzt, indem ich verschiedene MySQL-Treiber getestet habe, die häufig in Python verwendet werden:
-
MySQLdb (weit verbreiteter, aber alter Datenbank-Connector, letzter Commit war vor 7 Jahren!):
$ pip install MySQL-python
-
mysqlclient (moderne Version von
MySQL-python
, aber mit vielen Fehlerbehebungen und Verbesserungen):$ pip install mysqlclient
-
PyMySQL (reiner Python-MySQL-Datenbanktreiber):
$ pip install PyMySQL
Fügen Sie dann
settings.py
hinzu (direkt unter demimport os
):try: import pymysql pymysql.install_as_MySQLdb() except: pass
-
MySQL-Connector-Python von Oracle (reiner Python-MySQL-Datenbanktreiber):
$ pip install mysql-connector-python-rf
Bearbeiten Sie dann die
ENGINE
der Datenbank Konfiguration insettings.py
:'ENGINE': 'mysql.connector.django',
Das SAVEPOINT-Problem tritt nur auf, wenn MySQL-python verwendet wird Anschluss (Treiber Nr. 1), aber nicht in den anderen (Treiber Nr. 2, Nr. 3, Nr. 4). In meinem Fall hatte ich den mysqlclient gewählt . Das Problem ist jetzt behoben.