Mysql
 sql >> Database >  >> RDS >> Mysql

Django + MySQL - Admin Site - Aggiungi utente - OperationalError - SAVEPOINT non esiste

Questo bug mi perseguitava da molto tempo, quindi ho deciso di approfondire e provare a risolverlo una volta per tutte.

Causa principale:il problema SAVEPOINT è un bug che si verifica solo in MySQL-Python connettore.

Correzione:utilizza altri driver MySQL per Python (ad es. mysqlclient ).

Dettagli/Risultati:

  • Ho provato i binari MySQL in Homebrew, MAMP e XAMPP per Mac.
  • Ho provato varie versioni di MySQL, 5.6 (libmysqlclient.18.dylib ) e 5.7 (libmysqlclient.20.dylib ).
  • Ho provato vari driver MySQL di Python.

Nessuna relazione trovata variando i binari/versioni di MySQL. Ma ho ristretto il problema testando vari driver MySQL comunemente usati in Python:

  1. MySQLdb (connettore di database ampiamente utilizzato ma vecchio, l'ultimo commit è stato 7 anni fa!):

    $ pip install MySQL-python

  2. mysqlclient (versione moderna di MySQL-python , ma con molte correzioni di bug e miglioramenti):

    $ pip install mysqlclient

  3. PyMySQL (driver di database MySQL Python puro):

    $ pip install PyMySQL

    Quindi, aggiungi settings.py (appena sotto il import os ):

    try:
        import pymysql
        pymysql.install_as_MySQLdb()
    except:
        pass
    
  4. Connettore MySQL-Python di Oracle (driver di database MySQL Python puro):

    $ pip install mysql-connector-python-rf

    Quindi, modifica il ENGINE del database configurazione in settings.py :

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

Il problema SAVEPOINT si verifica solo quando si utilizza MySQL-python connettore (driver n. 1), ma non negli altri (driver n. 2, n. 3, n. 4). Nel mio caso, avevo scelto mysqlclient . Il problema è sparito ora.