2013-04-22 4 views
0
exp = "Ted is a good film" 
cursor.execute ("insert into films (descp) values (exp)") 
cursor.commit() 

Я использую выше кода с сервера MS SQL, но он говорит: Invalid столбец name'exp» я использую pyodbc.Вставка переменной в качестве значения SQL в питона

+2

FWIW, любое из решений будет работать, но (в настоящее время) Xbb является единственный, который не является потенциально уязвимым для SQL-инъекции. – Aya

+0

@ Ая, почему вы думаете, что я использую это для SQL-инъекции? – Mahdi

ответ

1

Вам необходимо ввести содержимое exp в выражение вставки как строку. Вы можете использовать string format и ' «:

exp = "Ted is a good film" 
cursor.execute ("insert into films (descp) values ('{exp}')".format(exp=exp)) 
cursor.commit() 
+0

После попытки сказать: заявление было прекращено. – Mahdi

+2

Как насчет 'exp =" anything '); drop table films; - "'? – eumiro

9
cursor.execute ("insert into films (descp) values (?)",exp) 
+0

Мое решение работает, но xbb является более правильным решением. [Документация] (https://code.google.com/p/pyodbc/wiki/Cursor#execute) – emigue

+0

Ваше решение сработало, но оно говорит: заявление завершено – Mahdi

3

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

cursor.execute ("insert into films (descp) values (?)", (exp,)) 
Смежные вопросы