Otra vez MySQL

Chema Cortes py en ls-l.org
Vie Feb 18 11:15:56 CET 2005


Ariel Nardelli escribió:
> Hace tiempo que busco la documentacion para saber que poner segun el 
> tipo de dato a meter en la base de datos.
> Actualmente uso el %s para todo (campos numericos, alfanumericos, fecha 
> y lo que venga!) pero nunca pude encontrar que % poner para los 
> distintos tipos de campos...
> 
> Me pueden decir alguna dir donde esta esta info?

A veces, cuando no hay documentación, lo mejor es acudir al código fuente.

Por curiosidad, he ido mirando poco a poco algunos de estos módulos que 
cumplen con la DB-API, y parecen calcados unos de otros. Como 
"generalización" (hay excepciones) se ve que el .execute() acaba por 
invocar al .executemany(), que es quien se lleva todo el trabajo.

Los parámetros son convertidos inteligentemente a cadenas de texto. No 
hay que preocuparse de mucho, ya que es capaz de convertir cualquier 
tipo de dato normal en una base de datos (enteros, float, fechas,...). 
Con estos parámetros convertidos en texto, les añade los apóstrofes de 
inicio y final (quoted) y construye la sentencia SQL por aplicación del 
operador formato de python '%' del modo más normal.

Así que resumiendo: sigue usando %s para todo.


Hay que tener en cuenta que a veces se debe "forzar" la conversión de 
tipos para facilitar la labor al módulo. La DB-API aconseja implementar 
algunas funciones de "conversión", aunque he visto que faltan en muchos 
módulos. Por ejemplo, para datos binarios (blobs) se debería usar la 
función .Binary() para convertir un objeto python al tipo binario de la 
base de datos.

En mi bitácora cuento un poco de ésto último en:
http://ch3m4.org/blog/index.php/py/2005/01/24/manejo_de_blobs_con_postgresql




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