Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/05/2010, 15:10
refreegrata
 
Fecha de Ingreso: agosto-2008
Mensajes: 198
Antigüedad: 15 años, 8 meses
Puntos: 27
Duda con insert y psycopg2

Hola, soy yo nuevamente, con mis dudas de novato en python.

Resulta que estoy usando postgresql. Para trabajar con este motor hago uso del modulo
"psycopg2"

El problema está al hacer un insert.

Yo tengo la siguiente tabla:

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


Es decir, el campo codigo es un serial.

Bueno, para realizar un insert seguro con psycopg2 debo realizarlo de la forma
Código PHP:
cursor.execute("INSERT INTO tabla informacion) VALUES (%s)",("abcdef")) 
Ahora el problema es que esto no funciona, y debo hacerlo de la forma:
Código PHP:
cursor.execute("INSERT INTO tabla (codigo,informacion) VALUES (nextval(%s),%s)",
            (
"dato_codigo_seq","abcdef")) 
donde "dato_codigo_seq" es el nombfre de la secuencia del serial.

Mi pregunta es: ¿conocen alguna manera de realizar la instruccion sin mencionar el campo serial, y que aun así sea una consulta segura?

Por si no me entendieron:
generalmente uno realiza un insert de la forma
Código PHP:
insert into tabla(informacion)values('asdsa'
sin hacer mencion al campo serial, el cual toma los valores que le corresponden solos

P.D.: si lo hiciera de la forma
Código PHP:
cursor.execute("INSERT INTO tabla informacion) VALUES ("+valor+")"
funcionaría, pero sería una consulta propensa a SQLinjection.

Bueno, esa es mi duda, espero puedan ayudarme, talvés en otros motores de bases de datos pasa lo mismo, y hay una manera de resolverlo que aun no descubro.

saludos