このバグは長い間私を悩ませていたので、私はさらに掘り下げて、それを完全に解決しようと決心しました。
根本原因: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を選択しました 。問題はなくなりました。