2016-12-05 4 views
1

Я новый usign MySLQdb для Python У меня есть этот код:_mysql_exceptions.ProgrammingError:. (1064, «У вас есть ошибка в вашем SQL синтаксиса;)

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])) 

Но когда я исполняю, я это следующее сообщение об ошибке:. 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")

Я представить себе, что ошибка в проведён имя таблицы, но я не уверен, что

+0

Ошибка возникает из-за использования '' 'вместо обратных ссылок для идентификатора. не уверен, как справиться с этим в python. – Sirko

+0

Заполнитель не может обычно использоваться для * идентификаторов * (имена таблиц и столбцов и т. Д.). Если это был собственный подготовленный оператор, API базы данных отвергнет его. – deceze

ответ

1

AFAIK, mysql-python не обрабатывает замены имен таблиц: это вслепую добавляет кавычки вокруг всех переменных и данные эвакуации снова в SQL-инъекции.

Вашей лучшая удачи, чтобы объединить строку самостоятельно, но вы должны быть очень осторожными о содержании name_tabela в этом случае:

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])) 

Кстати, вы можете simplfy своего execute второго ARG таким образом:

cursor.execute(insert, row[:15]) 
# or even this if the `row` has exactly 15 values 
cursor.execute(insert, row) 
Смежные вопросы