[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"