Deze bug heeft me lang achtervolgd, dus ik besloot verder te graven en te proberen het voor eens en altijd op te lossen.
Hoofdoorzaak:het SAVEPOINT-probleem is een bug die alleen voorkomt in MySQL-Python
aansluiting.
Oplossing:gebruik andere MySQL-stuurprogramma's voor Python (bijv. mysqlclient
).
Details/Bevindingen:
- Ik heb de MySQL-binaire bestanden geprobeerd in Homebrew, MAMP en XAMPP voor Mac.
- Verschillende MySQL-versies geprobeerd, 5.6 (
libmysqlclient.18.dylib
) en 5.7 (libmysqlclient.20.dylib
). - Verschillende MySQL-stuurprogramma's van Python geprobeerd.
Geen relaties gevonden door de MySQL binaries/versies te variëren. Maar ik heb het probleem verkleind door verschillende MySQL-stuurprogramma's te testen die vaak worden gebruikt in Python:
-
MySQLdb (veelgebruikte maar oude database-connector, laatste commit was 7 jaar geleden!):
$ pip install MySQL-python
-
mysqlclient (moderne versie van
MySQL-python
, maar met veel bugfixes en verbeteringen):$ pip install mysqlclient
-
PyMySQL (puur Python MySQL-databasestuurprogramma):
$ pip install PyMySQL
Voeg vervolgens
settings.py
. toe (net onder deimport os
):try: import pymysql pymysql.install_as_MySQLdb() except: pass
-
MySQL-Connector-Python door Oracle (puur Python MySQL-databasestuurprogramma):
$ pip install mysql-connector-python-rf
Bewerk vervolgens de
ENGINE
. van de database configuratie insettings.py
:'ENGINE': 'mysql.connector.django',
Het SAVEPOINT-probleem doet zich alleen voor bij gebruik van de MySQL-python connector (#1 driver), maar niet in de andere (#2, #3, #4 drivers). In mijn geval had ik de mysqlclient . gekozen . Probleem is nu verdwenen.