2010-05-25 3 views
2

Я новичок в Python и psycopg2 и имею проблемы с простой вставкой.Проблема со вставкой и psycopg2

Это мой стол:

CREATE TABLE tabla 
(
codigo integer NOT NULL DEFAULT nextval('dato_codigo_seq'::regclass), 
informacion character(30) NOT NULL, 
CONSTRAINT dato_pkey PRIMARY KEY (codigo) 
) 

Поле codigo является последовательным.

Когда я делаю предложение:

cursor.execute("INSERT INTO tabla informacion) VALUES (%s)",("abcdef")) 

PostgreSQL генерирует исключение.

я должен сделать

cursor.execute("INSERT INTO tabla (codigo,informacion) VALUES (nextval(%s),%s)", 
      ("dato_codigo_seq","abcdef")) 

где dato_codigo_seq является последовательность в поле codigo.

Мой вопрос ISL Могу ли я сделать предложение, как

insert into tabla(informacion)values('asdsa')

и пусть PostgreSQL обрабатывать обращения последовательного поля?

Я могу это сделать:

cursor.execute("INSERT INTO tabla informacion) VALUES ("+valor+")")" 

, но это предложение может быть использовано для атаки инъекции SQL.

Это все. Спасибо, что прочитал мой вопрос, и извините за мой плохой английский (я говорю по-испански).

+0

Bienvenidos StackOverflow. – bernie

+0

с аналогичной проблемой. Тем не менее, '' 'cursor.execute ("INSERT INTO tabla informacion) VALUES (" + valor + ")") строка типа' '' 'не сохраняется в базе данных, а просто увеличивает мой серийный номер db. –

ответ

4
cursor.execute("""insert into tabla (informacion) VALUES (%s);""",(asdas,)) 

, что это решение

+3

будет больше явный, второй аргумент execute() должен быть кортежем, а в Python конечная запятая обязательна для 1-элементных кортежей. – piro

0

в вашем примере:

cursor.execute("INSERT INTO tabla informacion) VALUES (%s)",("abcdef",)) 
Смежные вопросы