Python: вставка двойных или одинарных кавычек вокруг строки - PullRequest
3 голосов
/ 13 марта 2010

Я использую python для доступа к базе данных MySQL и получаю неизвестный столбец в поле из-за отсутствия кавычек вокруг переменной.

код ниже:

cur = x.cnx.cursor()
cur.execute('insert into tempPDBcode (PDBcode) values (%s);' % (s)) 
rows = cur.fetchall()

Как вручную вставить двойные или одинарные кавычки вокруг значения s? Я пытался использовать str() и вручную объединять кавычки вокруг s, но это все равно не работает. Оператор sql отлично работает, iv дважды и трижды проверьте мой запрос sql.

Ответы [ 3 ]

10 голосов
/ 13 марта 2010

Вы не должны использовать строковые функции Python для построения оператора SQL.Вы рискуете оставить уязвимость SQL-инъекции.Вы должны сделать это вместо этого:

cur.execute('insert into tempPDBcode (PDBcode) values (%s);', s) 

Запишите запятую.

5 голосов
/ 13 марта 2010

Python сделает это автоматически, если вы используете API базы данных:

cur = x.cnx.cursor()
cur.execute('insert into tempPDBcode (PDBcode) values (%s)',s) 

Использование DB API означает, что python определит, использовать ли кавычки или нет, а также означает, что вам не нужно беспокоиться о атаках с использованием SQL-инъекций, если ваша переменная s содержит, скажем,

value'); drop database; '
0 голосов
/ 13 марта 2010

Если бы это был чисто вопрос об обработке строк, ответом было бы просто поместить их в строку:

cur.execute('insert into tempPDBcode (PDBcode) values ("%s");' % (s)) 

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

Однако, как отмечали другие ответы и комментарии, в этом случае существуют специфические для SQL проблемы.

...