Tato chyba mě pronásledovala dlouhou dobu, a tak jsem se rozhodl kopat dále a pokusit se ji jednou provždy vyřešit.
Hlavní příčina:Problém SAVEPOINT je chyba, která se vyskytuje pouze v MySQL-Python
konektoru.
Oprava:Použijte jiné ovladače MySQL pro Python (např. mysqlclient
).
Podrobnosti/Zjištění:
- Vyzkoušeli jsme binární soubory MySQL v Homebrew, MAMP a XAMPP pro Mac.
- Vyzkoušeli různé verze MySQL, 5.6 (
libmysqlclient.18.dylib
) a 5.7 (libmysqlclient.20.dylib
). - Vyzkoušeli jsme různé ovladače MySQL v Pythonu.
Nebyly nalezeny žádné vztahy změnou binárních souborů/verzí MySQL. Problém jsem však zúžil testováním různých ovladačů MySQL běžně používaných v Pythonu:
-
MySQLdb (Široce používaný, ale starý databázový konektor, poslední potvrzení bylo před 7 lety!):
$ pip install MySQL-python
-
mysqlclient (moderní verze
MySQL-python
, ale se spoustou oprav chyb a vylepšení):$ pip install mysqlclient
-
PyMySQL (čistý databázový ovladač Python MySQL):
$ pip install PyMySQL
Poté přidejte
settings.py
(přímo podimport os
):try: import pymysql pymysql.install_as_MySQLdb() except: pass
-
MySQL-Connector-Python od Oracle (čistý databázový ovladač Python MySQL):
$ pip install mysql-connector-python-rf
Poté upravte
ENGINE
databáze konfiguraci vsettings.py
:'ENGINE': 'mysql.connector.django',
K problému SAVEPOINT dochází pouze při použití MySQL-python konektor (ovladač č. 1), ale ne v ostatních (ovladače č. 2, #3, #4). V mém případě jsem zvolil mysqlclient . Problém je nyní pryč.