problema de novato

Marcos Sánchez Provencio rapto en arrakis.es
Sab Mar 19 10:06:53 CET 2005


Hay varios tipos de marcador de parámetro:

1) Por secuencia: El marcador suele ser %s o ?
2) Por nombre: El marcador suele ser %(nombre)s o :nombre
3) Por orden: El marcador suele ser :1, :2...

Para saber cuál se usa, hay que leer la documentación del módulo
concreto. Hay una lista de correo de bbdd en Python (db-sig) donde se ha
hablado innumerables veces de unificar el estilo de los parámetros, pero
no se ha llegado a un acuerdo de cómo hacerlo sin bajar el rendimiento
de las consultas.

Ehh ¿cuál era la pregunta? :-)
El estándar en odbc es usar el marcador por secuencia (?) por lo que es
casi seguro que el módulo odbc de las extensiones Windows usará éste (si
da para tanto, que el pobre tiene sus añitos de muerto y enterrado).

Casi seguro que daría mejor resultado usar adodbapi o mxOdbc, pero
claro, a mí me enseñaron que no había mejor programa que el que
funcionaba, y si a ti te funciona, para qué vas a cambiarlo.
 
El vie, 18-03-2005 a las 21:20 +0000, Juan Ignacio Rodríguez de León
escribió:
> Marcos Sánchez Provencio wrote:
> > El modo correcto de usar sql desde programas (con cualquier lenguaje, no
> > sólo Python) implica no meter valores dentro del sql; en lugar de cada
> > valor se mete una marca de parámetro (en pyPgSQL es %s). Luego, al hacer
> > la llamada al servidor, se le indica, por orden en este caso, el valor
> 
> Una pregunta. ¿Sabes si los modulos de ODBC que viene
> con las extensiones para windows permiten esa sintaxis?
> He utilizado la sintaxis que indicas para pyPgSQL, accediendo
> via ODBC a una base de datos Firebird, pero
> me da un error:
> 
>  >>> cur.execute('Select * from Proveedor where id_proveedor=%s', 25)
> Traceback (most recent call last):
>    File "<stdin>", line 1, in ?
> OdbcError: expected sequence as second parameter
> 
> Si le paso como segundo parámetro una lista o una tupla, que es lo que
> parece indicar el mensaje de error, me da un bonito:
> 
>  >>> cur.execute('Select * from Proveedor where id_proveedor=%s', [25])
> Traceback (most recent call last):
>    File "<stdin>", line 1, in ?
> dbi.internal-error: Dynamic SQL Error
> SQL error code = -104
> Token unknown - line 1, char 44
>   in EXEC
> 
> O sea, parece que dbi si sabe lo que es SQL Dinamico, pero al ODBC no le
> acaba de gustar. ¿Estoy errado? ¿o estoy herrado, como los burros?
> ¿Alguien ha conseguido hacer sql dinámico con ODBC?
> 
> 
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es




Más información sobre la lista de distribución Python-es