Cuando abrir la coneccion con las bases de datos desde python?

Hernán Martínez Foffani hernan en orgmf.com.ar
Lun Oct 4 10:40:20 CEST 2004


>> no creo que abrir constantemente conexiones a una base de datos sea
>> una buena técnica. Hay muchas en los que la operación es bastante
>> rápida, pero otras que creen un proceso por cada conexión en el
>> servidor, y eso con muchas conexiones se vuelve lento. Por eso, está
>> la técnica del connection pooling, es decir, siempre mantener un
>> conjunto de conexiones abiertas (e.g. 20) y usar cualquiera que esté
>> libre. Además, eso asegura que no se desborde el servidor.
>
> Mas o menos la idea que tenia yo entonces por lo que veo era correcta,
> creo que aca lo mejor es lograr equilibrio para mi hay que
> equilibrar....
>
> Lo que no sabia nada es de connection polling mmm sabes de algun lugar
> donde pueda encontrar info? me interesa el tema...

Lo mas razonable es encontrar drivers para tu base de datos que ya
se encarguen del pool de conexiones.

> Yo abro una sola coneccion y paso por esa todas absolutamente todas
> los movimientos que halla en sql sobre esa unica coneccion....

Es algo mas complejo que eso.  Por ejemplo, si tu aplicacion usa
transacciones no puedes "mezclar" las operaciones.  Además,
hay drivers de acceso de BD te impiden ejecutar sql mientras
tengas un cursor abierto sobre esa conexión.

En la práctica la API para el programador de aplicaciones es muy
similar (por no decir idéntica) uses o no el pool.  Para este
ultimo "abrir" una conexion es pasarle a la aplicacion
un objeto que en realidad es el indice de la primer conexion libre
de la lista (pool) y "cerrar" es enviar un Rollback y marcarla
como libre.  Ambas operaciones necesitan de un buen bloqueo para
concurrencia y de un monitor sobre cada conexion ocupada que la
libere pasado un determinado tiempo de inactividad.

Con respecto a tu pregunta original, el caso de uso dependerá
de qué tipo de aplicación desarrolles.  Para una aplicación web
normal (tipo CGI) no tienes opciones, debes abrir y cerrar la
conexion dentro de cada request.  En arquitecturas de dos capas
podrías abrir y cerrar las conexiones al iniciar y terminar la
aplicacion.

-H.




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