sql >> Database >  >> RDS >> Mysql

Django + MySQL - Admin Site - Gebruiker toevoegen - OperationalError - SAVEPOINT bestaat niet

Deze bug heeft me lang achtervolgd, dus ik besloot verder te graven en te proberen het voor eens en altijd op te lossen.

Hoofdoorzaak:het SAVEPOINT-probleem is een bug die alleen voorkomt in MySQL-Python aansluiting.

Oplossing:gebruik andere MySQL-stuurprogramma's voor Python (bijv. mysqlclient ).

Details/Bevindingen:

  • Ik heb de MySQL-binaire bestanden geprobeerd in Homebrew, MAMP en XAMPP voor Mac.
  • Verschillende MySQL-versies geprobeerd, 5.6 (libmysqlclient.18.dylib ) en 5.7 (libmysqlclient.20.dylib ).
  • Verschillende MySQL-stuurprogramma's van Python geprobeerd.

Geen relaties gevonden door de MySQL binaries/versies te variëren. Maar ik heb het probleem verkleind door verschillende MySQL-stuurprogramma's te testen die vaak worden gebruikt in Python:

  1. MySQLdb (veelgebruikte maar oude database-connector, laatste commit was 7 jaar geleden!):

    $ pip install MySQL-python

  2. mysqlclient (moderne versie van MySQL-python , maar met veel bugfixes en verbeteringen):

    $ pip install mysqlclient

  3. PyMySQL (puur Python MySQL-databasestuurprogramma):

    $ pip install PyMySQL

    Voeg vervolgens settings.py . toe (net onder de import os ):

    try:
        import pymysql
        pymysql.install_as_MySQLdb()
    except:
        pass
    
  4. MySQL-Connector-Python door Oracle (puur Python MySQL-databasestuurprogramma):

    $ pip install mysql-connector-python-rf

    Bewerk vervolgens de ENGINE . van de database configuratie in settings.py :

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

Het SAVEPOINT-probleem doet zich alleen voor bij gebruik van de MySQL-python connector (#1 driver), maar niet in de andere (#2, #3, #4 drivers). In mijn geval had ik de mysqlclient . gekozen . Probleem is nu verdwenen.



  1. Is kruistabelindexering mogelijk?

  2. GDPR-compliance en uw SQL Server

  3. De Oracle-instantie afsluiten en starten

  4. Tabel- en kolomnamen ontleden uit SQL/HQL Java