Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Django + MySQL - Admin-Site - Benutzer hinzufügen - OperationalError - SAVEPOINT existiert nicht

Dieser Fehler verfolgte mich lange Zeit, also beschloss ich, weiter zu graben und zu versuchen, ihn ein für alle Mal zu lösen.

Hauptursache:Das SAVEPOINT-Problem ist ein Fehler, der nur in MySQL-Python auftritt Stecker.

Behebung:Verwenden Sie andere MySQL-Treiber für Python (z. B. mysqlclient ).

Details/Ergebnisse:

  • Die MySQL-Binärdateien in Homebrew, MAMP und XAMPP für Mac ausprobiert.
  • Verschiedene MySQL-Versionen ausprobiert, 5.6 (libmysqlclient.18.dylib ) und 5.7 (libmysqlclient.20.dylib ).
  • Verschiedene MySQL-Treiber von Python ausprobiert.

Beim Variieren der MySQL-Binärdateien/-Versionen wurden keine Beziehungen gefunden. Aber ich habe das Problem eingegrenzt, indem ich verschiedene MySQL-Treiber getestet habe, die häufig in Python verwendet werden:

  1. MySQLdb (weit verbreiteter, aber alter Datenbank-Connector, letzter Commit war vor 7 Jahren!):

    $ pip install MySQL-python

  2. mysqlclient (moderne Version von MySQL-python , aber mit vielen Fehlerbehebungen und Verbesserungen):

    $ pip install mysqlclient

  3. PyMySQL (reiner Python-MySQL-Datenbanktreiber):

    $ pip install PyMySQL

    Fügen Sie dann settings.py hinzu (direkt unter dem import os ):

    try:
        import pymysql
        pymysql.install_as_MySQLdb()
    except:
        pass
    
  4. MySQL-Connector-Python von Oracle (reiner Python-MySQL-Datenbanktreiber):

    $ pip install mysql-connector-python-rf

    Bearbeiten Sie dann die ENGINE der Datenbank Konfiguration in settings.py :

    'ENGINE': 'mysql.connector.django',
    

Das SAVEPOINT-Problem tritt nur auf, wenn MySQL-python verwendet wird Anschluss (Treiber Nr. 1), aber nicht in den anderen (Treiber Nr. 2, Nr. 3, Nr. 4). In meinem Fall hatte ich den mysqlclient gewählt . Das Problem ist jetzt behoben.