Denne fejl forfulgte mig i lang tid, så jeg besluttede at grave videre og prøve at løse det én gang for alle.
Grundårsag:SAVEPOINT-problemet er en fejl, der kun opstår i MySQL-Python
stik.
Fix:Brug andre MySQL-drivere til Python (f.eks. mysqlclient
).
Detaljer/fund:
- Prøvde MySQL binære filer i Homebrew, MAMP og XAMPP til Mac.
- Prøvde forskellige MySQL-versioner, 5.6 (
libmysqlclient.18.dylib
) og 5.7 (libmysqlclient.20.dylib
). - Prøvde forskellige Pythons MySQL-drivere.
Ingen relationer fundet ved at variere MySQL binære filer/versioner. Men jeg har indsnævret problemet ved at teste forskellige MySQL-drivere, der almindeligvis bruges i Python:
-
MySQLdb (udbredt, men gammel databaseforbindelse, sidste commit var for 7 år siden!):
$ pip install MySQL-python
-
mysqlclient (moderne version af
MySQL-python
, men med masser af fejlrettelser og forbedringer):$ pip install mysqlclient
-
PyMySQL (ren Python MySQL-databasedriver):
$ pip install PyMySQL
Tilføj derefter
settings.py
(lige underimport os
):try: import pymysql pymysql.install_as_MySQLdb() except: pass
-
MySQL-Connector-Python af Oracle (ren Python MySQL-databasedriver):
$ pip install mysql-connector-python-rf
Rediger derefter databasens
ENGINE
konfiguration isettings.py
:'ENGINE': 'mysql.connector.django',
SAVEPOINT-problemet opstår kun, når du bruger MySQL-python stik (#1 driver), men ikke i de andre (#2, #3, #4 drivere). På mit tilfælde havde jeg valgt mysqlclient . Problemet er væk nu.