このバグは長い間私を悩ませていたので、私はさらに掘り下げて、それを完全に解決しようと決心しました。
根本原因:SAVEPOINTの問題は、MySQL-Python
でのみ発生するバグです。 コネクタ。
修正:Python用の他のMySQLドライバーを使用する(例:mysqlclient
。
詳細/調査結果:
- Homebrew、MAMP、XAMPPforMacでMySQLバイナリを試しました。
- さまざまなMySQLバージョン5.6(
libmysqlclient.18.dylib
)を試しました )および5.7(libmysqlclient.20.dylib
)。 - さまざまなPythonのMySQLドライバーを試しました。
MySQLのバイナリ/バージョンを変更しても関係は見つかりませんでした。しかし、Pythonで一般的に使用されるさまざまなMySQLドライバーをテストすることで、問題を絞り込みました。
-
MySQLdb (広く使用されているが古いデータベースコネクタ、最後のコミットは7年前です!):
$ pip install MySQL-python
-
mysqlclient (最新バージョンの
MySQL-python
、ただし、多くのバグ修正と改善があります):$ pip install mysqlclient
-
PyMySQL (純粋なPython MySQLデータベースドライバー):
$ pip install PyMySQL
次に、
settings.py
を追加します (import os
のすぐ下 ):try: import pymysql pymysql.install_as_MySQLdb() except: pass
-
MySQL-Connector-Python Oracle(純粋なPython MySQLデータベースドライバー):
$ pip install mysql-connector-python-rf
次に、データベースの
ENGINE
を編集しますsettings.py
での構成 :'ENGINE': 'mysql.connector.django',
SAVEPOINTの問題は、 MySQL-pythonを使用している場合にのみ発生します コネクタ(#1ドライバ)ですが、他のコネクタ(#2、#3、#4ドライバ)にはありません。私の場合、 mysqlclientを選択しました 。問題はなくなりました。