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 PyMySQLNastę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-rfNastępnie edytuj
ENGINEbazy 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ął.