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 PyMySQLVoeg 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-rfBewerk 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.