Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Django + MySQL - Admin Site - Adicionar usuário - OperationalError - SAVEPOINT não existe


Esse bug me assombrou por muito tempo, então decidi cavar mais e tentar resolvê-lo de uma vez por todas.

Causa Raiz:O problema SAVEPOINT é um bug que ocorre apenas em MySQL-Python conector.

Correção:Use outros drivers MySQL para Python (por exemplo, mysqlclient ).

Detalhes/Descobertas:
  • Tentei os binários do MySQL no Homebrew, MAMP e XAMPP para Mac.
  • Tentei várias versões do MySQL, 5.6 (libmysqlclient.18.dylib ) e 5.7 (libmysqlclient.20.dylib ).
  • Tentei vários drivers MySQL do Python.

Nenhum relacionamento encontrado variando os binários/versões do MySQL. Mas reduzi o problema testando vários drivers MySQL comumente usados ​​em Python:

  1. MySQLdb (conector de banco de dados amplamente usado, mas antigo, o último commit foi há 7 anos!):

    $ pip install MySQL-python

  2. cliente mysql (versão moderna do MySQL-python , mas com muitas correções de bugs e melhorias):

    $ pip install mysqlclient

  3. PyMySQL (driver de banco de dados Python MySQL puro):

    $ pip install PyMySQL

    Em seguida, adicione settings.py (logo abaixo do import os ):
    try:
        import pymysql
        pymysql.install_as_MySQLdb()
    except:
        pass
    

  4. MySQL-Connector-Python pela Oracle (driver de banco de dados Python MySQL puro):

    $ pip install mysql-connector-python-rf

    Em seguida, edite o ENGINE do banco de dados configuração em settings.py :
    'ENGINE': 'mysql.connector.django',
    

O problema SAVEPOINT ocorre apenas ao usar o MySQL-python conector (driver nº 1), mas não nos outros (drivers nº 2, nº 3, nº 4). No meu caso, eu escolhi o mysqlclient . O problema acabou agora.