2016-08-01 38 views
-1

Dieser Fehler tritt auf, wenn ich versuche, einige Werte in eine Tabelle einzufügen. Hier ist mein Code:Einfügen von geordneten Dict-Werten bei der Verwendung von MySQL INSERT INTO

def tsx_insert(self, d_list): 

for item in d_list: 

    query = """ INSERT IGNORE INTO tsx_first_insert(protocollo,procedura,oggetto,priorita, 
                tipo_richiesta,sottotipo_richiesta,emergenza, 
                richiesta,uo_richiedente,autore,scadenza_sla) 
       VALUES(%(protocollo)s,%(procedura)s,%(oggetto)s,%(priorita)s,%(tipo_richiesta)s, 
         %(sottotipo_richiesta)s,%(emergenza)s,%(richiesta)s,%(uo_richiedente)s, 
         %(autore)s,%(scadenza_sla)s)""" 

    values = item.values() 

    self.exec_query(query,values) 

Und hier exec_query 'Funktion:

def exec_query(self, query, params): 
    try: 
     if self.connected is None: 
      self.connect() 

     self.cursor = self.connected.cursor() 
     self.cursor.connection.autocommit(True) 
     self.cursor.execute(query) 

     if self.cursor.description: 
      self.description = [d[0] for d in self.cursor.description] 

     self.rows = self.cursor.rowcount 
     self.sql_result = self.cursor.fetchall() 
    except MySQLdb.Error, e: 
     logging.error('Error {0}: {1}'.format(e.args[0], e.args[1])) 
    finally: 
     self.cursor.close() 

Der Fehler ist: „Fehler 1064: Sie haben einen Fehler in der SQL-Syntax, kontrollieren das Handbuch, das entspricht Ihrer MariaDB Server-Version für die richtige Syntax bei '% (protocollo) s,% (procedura) s,% (oggetto) s,% (Priorita) s,% (tipo_richiesta) s, ' in Zeile 4"

zu verwenden

Ich kann nicht herausfinden, was das Problem ist. Vielen Dank im Voraus für Ihre Hilfe.

+0

Sie links den wichtigsten Teil des Fehlers aus – e4c5

+0

@ e4c5 Herausgegeben mit voller Fehlermeldung – echo

+0

Es sieht nicht so aus, wie Sie in den Parametern sind Ersetzen ... – bernie

Antwort

1

Sie haben vergessen, Ihr params Wörterbuch in Ihrem self.cursor.execute() Methodenaufruf zu erwähnen, so dass die Parameterfolgen an Ort und Stelle statt ersetzt wurden.

Versuchen

self.cursor.execute(query, params) 
+0

Und beachten Sie, dass Die Variable 'values' wird dann vollständig redundant! – holdenweb

+0

Das war ein Fehler, danke. Allerdings habe ich einen anderen Fehler: query = Abfrage% Tupel ([db.literal (Element) für Artikel in Args]) ---> TypeError: Format erfordert eine Zuordnung – echo