Ten błąd prześladował mnie przez długi czas, więc postanowiłem kopać dalej i spróbować go rozwiązać raz na zawsze.
Główna przyczyna:Problem SAVEPOINT to błąd, który występuje tylko w MySQL-Python
złącze.
Poprawka:użyj innych sterowników MySQL dla Pythona (np. mysqlclient
).
Szczegóły/wyniki:
- Wypróbowałem pliki binarne MySQL w Homebrew, MAMP i XAMPP dla komputerów Mac.
- Próbowałem różnych wersji MySQL, 5.6 (
libmysqlclient.18.dylib
) i 5.7 (libmysqlclient.20.dylib
). - Próbowałem różnych sterowników MySQL Pythona.
Nie znaleziono relacji przez zróżnicowanie plików binarnych/wersji MySQL. Ale zawęziłem problem, testując różne sterowniki MySQL powszechnie używane w Pythonie:
-
MySQLdb (powszechnie używane, ale stare złącze bazy danych, ostatnie zatwierdzenie miało miejsce 7 lat temu!):
$ pip install MySQL-python
-
mysqlclient (nowoczesna wersja
MySQL-python
, ale z wieloma poprawkami i ulepszeniami):$ pip install mysqlclient
-
PyMySQL (czysty sterownik bazy danych MySQL w języku Python):
$ pip install PyMySQL
Następnie dodaj
settings.py
(tuż podimport os
):try: import pymysql pymysql.install_as_MySQLdb() except: pass
-
MySQL-Connector-Python przez Oracle (czysty sterownik bazy danych MySQL w języku Python):
$ pip install mysql-connector-python-rf
Następnie edytuj
ENGINE
bazy danych konfiguracja wsettings.py
:'ENGINE': 'mysql.connector.django',
Problem SAVEPOINT występuje tylko podczas korzystania z MySQL-python złącze (sterownik nr 1), ale nie w pozostałych (sterowniki nr 2, nr 3, nr 4). W moim przypadku wybrałem mysqlclient . Problem zniknął.