[pyar] conexion de python con postgres ¿que me recomiendan?

Mariano Reingart reingart en gmail.com
Sab Sep 10 19:12:14 ART 2011


2011/9/10 Claudio Freire <klaussfreire en gmail.com>:
> 2011/9/10 Mariano Reingart <reingart en gmail.com>:
>> pg8000 también parece interesante (es puro python y mucho más
>> flexible), aunque tiene unos temitas de unicode y excepciones (voy a
>> ver si me aceptan un parche).
>
> Yo no usaría una biblioteca pura python para esto.
> Por dos razones importantes:
>
> 1) Velocidad. Cuando se trabaja con bases de datos, no es poco común
> tener que procesar decenas de megas por segundo. Python puede procesar
> cadenas rápidamente, pero nunca le va a ganar a C. He trabajado mucho
> con python y protocolos de red, python tiene limitaciones que C no
> tiene. Aunque he pensado en hacer alguna biblioteca de extensión que
> otra para compensar.

Depende, con ese criterio haría la aplicación directamente en C.
En el contexto de una webapp no creo que haga diferencia.
pg8000 usa socket, ssl y struct, asique a mi entender esta bastante
optimizado usando bibliotecas en C.
Obviamente psycopg2 debería ser más rápido (tendría que probar para
saber cuanto...) pero no creo que haga diferencia respecto a los otros
tiempos que se manejan (de pg mismo y el interprete de python).

Si se manejan muchos datos, yo directamente usaría COPY y los
procesaría dentro del servidor con algún lenguaje procedural (plpgsql,
plpython o funciones en C llegado el caso).

> 2) Compatibilidad. Cambios en el protocolo de comunicación son fáciles
> de incorporar en psycopg2: sólo se recompila y listo, pues psycopg2
> usa libpq, así que con linkear contra la versión nueva está. En la
> versión python pura, hay que esperar el parche correspondiente. Lo he
> experimentado con el cambio a postgres 9.0.

Si, pero hay casos que libpq es el problema, ahí sería más fácil
parchear la versión python que actualizar el sistema operativo (si es
que se puede usar una librería en C).

Y a mi me paso al revés, al estar hecha en C, tuve que armar un
wrapper para que en su momento soporte commit en dos fases.
Otro punto fue que LISTEN/NOTIFY no andaban en windows.

Igualmente, probé los test contra pg9 y funcionan, por curiosidad,
¿que error tuviste?

> Hay otras razones para usar psycopg2, una es la que ya mencionaron:
> muuuuy estable.

Si, pero la razón por que uso pg8000 es la flexibilidad, por ej en los
estilos de parámetros (es similar a sqlite y otros conectores de
python).
También hay que reconocerle a psycopg que tiene un mapeador de datos
muy avanzado que puede llegar a ser útil, entre otras features y
extensiones propias de postgres.

Sds

Mariano Reingart
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com



More information about the pyar mailing list