2012-05-01 5 views
0

При попытке выполнить следующие действия:Неверный синтаксис INSERT INTO MySQL запрос из Python

def postToMySQL(date,data,date_column_name,data_column_name,table): 

cursor = conn.cursor() 


sql = "\"\"\"INSERT INTO " + table + " (" + date_column_name + ", " + data_column_name + ") VALUES(%s, %s)" + "\"\"\"" #+ ", " + "(" + date + ", " + data + ")" 
cursor.execute(sql,(date,data)) 

Я получаю эту ошибку:

_mysql_exceptions.ProgrammingError: (1064, 'You have an error in your SQL syntax... near: \'"""INSERT INTO natgas (Date, UK) VALUES(\'2012-05-01 13:00:34\', \'59.900\')"""\' at line 1')

Я недоумевали, где синтаксис является неправильным, потому что следующий пример жесткого кодирования работает нормально:

def postUKnatgastoMySQL(date, UKnatgas): 

cursor = conn.cursor() 

cursor.execute("""INSERT INTO natgas (Date, UK)VALUES(%s, %s)""", (date, UKnatgas)) 

Можете ли вы определить ошибку?

Альтернативно, не могли бы вы рассказать мне, как передавать параметры в список полей, а также список значений?

Большое спасибо!

ответ

1

Эти тройные кавычки представляют собой способ представления строки в python. Они не должны быть частью фактического запроса.

С другой стороны, будьте уверены, что вы доверяете своим данным этим подходом. Посмотрите SQL Injection.

+0

А, блестящий! теперь работает: sql = "INSERT INTO" + table + "(" + date_column_name + "," + data_column_name + ") VALUES (% s,% s)" Я немного слышал о SQL-инъекции. (пока), но есть ли легкая альтернатива этому подходу? – user578582

+0

[parameteris e] (http://bobby-tables.com/python.html) ваш запрос – mata

0

\'"""INSERT INTO natgas (Date, UK) VALUES(\'2012-05-01 13:00:34\', \'59.900\')"""\' at line 1')

Это, очевидно, не команда vlaid SQL. Вам нужно получить обратно косые косые черты, вы, вероятно, избегаете того, что вам не нужно.

тройные кавычки, например, не нужны там.

+0

Спасибо за ответ Ласка. Я пытаюсь воспроизвести это как строку> "" "INSERT INTO natgas (Date, UK) VALUES (% s,% s)" "" <, а затем передать его в cursor.execute. Для этого мне нужно избегать трех "" ", иначе python думает, что я закрываю строку. – user578582

+0

тройные кавычки не должны быть частью запроса, они являются синтаксисом python. Также кажется, что вы избежали одинарные кавычки в значениях. попробуйте удалить все обратные черты ... – WeaselFox

+0

К сожалению, когда я удаляю косые черты, я просто получаю цитату блока: "" "" INSERT INTO "+ table +" ("+ date_column_name +", "+ data_column_name + ") VALUES (% s,% s)" + "" "и python не распознает, что в строке есть переменные. – user578582