вставка python psycogp2 в справочную систему postgresql - PullRequest
5 голосов
/ 06 ноября 2010

У меня есть следующий код для вставки сделать вставку в моей базе данных postgresql

conn = psycopg2.connect("my connection setting are in here")
cur = conn.cursor()
cur.execute('INSERT INTO src_event (location_id, catname, title, name) VALUES (%i, \"%s\", \"%s\", \"%s\")' % (1441, "concert", item['title'], item['artists'] )) 

Однако, когда я запускаю это, я получаю следующую ошибку:

psycopg2.ProgrammingError: column "concert" does not exist
LINE 1: ...(location_id, catname, title, name) VALUES (1441, concert, "...

Но "концерт"это не столбец, это значение, поэтому я не понимаю, почему я получаю эту ошибку.

РЕДАКТИРОВАТЬ - я пытался поставить \ "вокруг значения концерта и пытался без

Как я могу получитьмои данные вставлены без получения этой ошибки?

1 Ответ

12 голосов
/ 06 ноября 2010

Вы действительно, действительно, не должны использовать форматирование строк Python для построения запросов - они подвержены SQL-инъекциям . И ваша настоящая проблема заключается в том, что вы используете «для цитирования, в то время как вы должны использовать» для цитирования («цитирует имена таблиц / столбцов и т. Д.,« Цитирует строки).

Вместо этого используйте следующий код:

cur.execute('INSERT INTO src_event (location_id, catname, title, name) VALUES (%s, %s, %s, %s)', (1441, 'concert', item['title'], item['artists']))

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

Также см. http://initd.org/psycopg/docs/usage.html#query-parameters.

...