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