sql >> Base de Datos >  >> RDS >> Mysql

Django + MySQL - Sitio de administración - Agregar usuario - OperationalError - SAVEPOINT no existe

Este error me persiguió durante mucho tiempo, así que decidí investigar más e intentar resolverlo de una vez por todas.

Causa raíz:el problema de SAVEPOINT es un error que ocurre solo en MySQL-Python conector.

Solución:use otros controladores MySQL para Python (por ejemplo, mysqlclient ).

Detalles/Hallazgos:

  • Probé los binarios de MySQL en Homebrew, MAMP y XAMPP para Mac.
  • Probé varias versiones de MySQL, 5.6 (libmysqlclient.18.dylib ) y 5.7 (libmysqlclient.20.dylib ).
  • Probé varios controladores MySQL de Python.

No se encontraron relaciones al variar los binarios/versiones de MySQL. Pero reduje el problema al probar varios controladores de MySQL que se usan comúnmente en Python:

  1. MySQLdb (Conector de base de datos ampliamente utilizado pero antiguo, ¡la última confirmación fue hace 7 años!):

    $ pip install MySQL-python

  2. cliente mysql (versión moderna de MySQL-python , pero con muchas correcciones de errores y mejoras):

    $ pip install mysqlclient

  3. PyMySQL (controlador de base de datos Python MySQL puro):

    $ pip install PyMySQL

    Luego, agregue settings.py (justo debajo de import os ):

    try:
        import pymysql
        pymysql.install_as_MySQLdb()
    except:
        pass
    
  4. Conector MySQL-Python por Oracle (controlador de base de datos MySQL de Python puro):

    $ pip install mysql-connector-python-rf

    Luego, edite el ENGINE de la base de datos configuración en settings.py :

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

El problema de SAVEPOINT ocurre solo cuando se usa MySQL-python conector (controlador #1), pero no en los otros (controladores #2, #3, #4). En mi caso, había elegido el mysqlclient . El problema ya no está.