2016-12-05 1 views
1

Ich bin neu usign MySLQdb für Python Ich habe diesen Code:_mysql_exceptions.ProgrammingError. (1064: „Sie haben einen Fehler in der SQL-Syntax;)

for row in csv_reader: 
    insert = """INSERT INTO %s 
       VALUES (DEFAULT, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) """ 
    cursor.execute(insert, (nome_tabela, row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14])) 

Aber wenn ich ausführen, ich habe diese folgende Fehlermeldung:. mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Aquecimento'\n\t\t\t\t\tVALUES (DEFAULT, 'c00010', 'Dorm1', '0.0', '0.0', '0.0', '3.4' at line 1")

ich bin mir vorstellen, dass der Fehler auf den Namen der Tabelle conected, aber ich bin nicht sicher, dass über

+0

der Fehler kommt von der Verwendung '' 'anstelle von Backticks für den Bezeichner. Ich bin mir nicht sicher, wie ich das in Python behandeln soll. – Sirko

+0

Platzhalter können normalerweise nicht für * Bezeichner * (Tabellen- und Spaltennamen usw.) verwendet werden. Wenn dies eine native prepared-Anweisung ist, wird sie von der Datenbank-API abgelehnt. – deceze

Antwort

1

Afaik, mysql-python keine Tabellennamen Ersatz Griff: blind fügt quotiert alle Variablen und escape Daten gegen SQL Injection.

Ihr bestes Glück ist die Zeichenfolge selbst verketten, aber Sie müssen besonders vorsichtig über den Inhalt des name_tabela in diesem Fall:

insert = (
     "INSERT INTO %s" % name_tabela 
     + " VALUES (DEFAULT, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" 
) 
cursor.execute(insert, (row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13], row[14])) 

By the way, können Sie Ihre execute Sekunden arg simplfy Dieser Weg:

cursor.execute(insert, row[:15]) 
# or even this if the `row` has exactly 15 values 
cursor.execute(insert, row) 
Verwandte Themen