cursor.execute ("INSERT INTO im_entry.test (" + entrym + ") VALUES ('" + p + "');") - PullRequest
3 голосов
/ 17 марта 2011
   entrym='entry'
   entrym=entrym+ str(idx)

   cursor.execute("INSERT INTO im_entry.test ("+entrym+") VALUES ('"+p+"');")

Я использую такой запрос, где entry1, entry2 и т. Д. - это таблицы моей базы данных. Программа не показывает никаких ошибок, но значение p не вставляется в БД. Что здесь не так? Пожалуйста, помогите мне.

1 Ответ

13 голосов
/ 17 марта 2011

По умолчанию psycopg2 автоматически запускает транзакции для вас, что означает, что вы должны указать его для фиксации. Обратите внимание, что commit является методом connection, а не cursor.

conn = psycopg2.connection('...')
cur = conn.cursor()
cur.execute("...")
conn.commit()

Намерение состоит в том, чтобы вы могли сгруппировать несколько операторов в одну транзакцию, чтобы другие запросы не увидели внесенных изменений, но также и по причинам производительности.

Также обратите внимание, что вы должны всегда использовать заполнители вместо объединения строк вместе.
Например ::1011*

cur.execute("INSERT INTO im_entry.test (colname) VALUES (%s)", [p])

В противном случае вы рискуете сделать SQL-инъекции возможными .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...