[Pgsql-ayuda] Python - Postgresql

Alvaro Herrera alvherre@dcc.uchile.cl
Sun, 6 Jul 2003 18:02:56 -0400


On Sun, Jul 06, 2003 at 04:20:48PM -0500, Francisco Navarro wrote:
> Hola!, espero me puedan ayudar con este mensaje de
> error
> 
> Traceback (most recent call last):
>   File "/home/fnavarro/altas2.py", line 27, in ?
>     resultado = conecta.query(inserta)
> _pg.error: ERROR:  parser: parse error at or near "3"
> 
> lo envia en la ejecucion de la linea inserta   =
> 'insert into actaservicio
> values('+factura+',\''+clase+',\''+nombre+',\''+telefono+',\''+matricula+',\''+sindefecto+',\''+calidadtrab+',\''+precio+',\''+plazo+',\''+otrosel+',\''+opinion+',\''+rellamada+',\''+retrabajo+',\''+folio+'\')'

En esa ensalada de comillas es dificil no equivocarse.  Fijate que el
string tiene que tener una comilla escapada antes y despues de cada
literal...  te recomiendo que uses comillas dobles para el string y
dejes las simples para los literales.  Ejemplo,

valoruno = "el valor de uno";
valordos = "el valor de dos";
var = "insert into foo (uno, dos) values ('"+valoruno+"', '"+valordos+"');"
print var;

Mucho mas legible, aunque sigue siendo feo.  Lo ideal sería usar una
especie de consulta preparada con "placeholders", y que el controlador
automáticamente pusiera comillas donde corresponda... algo como

pgquery = pgconn.prepare("insert into foo (uno, dos) values (?, ?)")
pgquery.exec("valor de uno", "valor de dos");

Pero no sé si se puede hacer en Python.

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"La gente vulgar solo piensa en pasar el tiempo;
el que tiene talento, en aprovecharlo"