sql >> データベース >  >> RDS >> Mysql

Django+MySQL-管理サイト-ユーザーの追加-OperationalError-SAVEPOINTが存在しません

    このバグは長い間私を悩ませていたので、私はさらに掘り下げて、それを完全に解決しようと決心しました。

    根本原因: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ドライバーをテストすることで、問題を絞り込みました。

    1. MySQLdb (広く使用されているが古いデータベースコネクタ、最後のコミットは7年前です!):

      $ pip install MySQL-python

    2. mysqlclient (最新バージョンのMySQL-python 、ただし、多くのバグ修正と改善があります):

      $ pip install mysqlclient

    3. PyMySQL (純粋なPython MySQLデータベースドライバー):

      $ pip install PyMySQL

      次に、settings.pyを追加します (import osのすぐ下 ):

      try:
          import pymysql
          pymysql.install_as_MySQLdb()
      except:
          pass
      
    4. 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を選択しました 。問題はなくなりました。



    1. ClusterControl1.7を使用したエージェントベースのデータベース監視の紹介

    2. postgresqlのIF-THEN-ELSEステートメント

    3. SQLServerのストアドプロシージャによって返される列を再定義する方法

    4. JavaでのFork/JoinFrameworkを使用した並列プログラミングの基本