2010-05-25 191 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 2010-05-26 03:26:34

+0

也有類似的問題。然而,'''cursor.execute(「INSERT INTO tabla informacion)VALUES(」+ valor +「)」)「'''type line沒有保存在數據庫中,它只是增加了我的db序列號 – 2011-10-18 00:28:51

回答

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

這是解決

+3

顯式的,execute()的第二個參數必須是一個元組,而在Python中,尾部逗號對於1項元組是強制的。 – piro 2010-07-02 16:42:22

0
在你的榜樣

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