[Python-es] Desarrollo Classe Manejadora Sqlite(Novato)

Chema Cortes pych3m4 en gmail.com
Lun Sep 23 02:51:11 CEST 2013


El día 22 de septiembre de 2013 21:16,  <revxfire en gmail.com> escribió:
> Buenas quisiera saber acerca de como es la mejor manera de manejar la
> insersion y manejo de base de datos en python, ahora mismo me cree una BD
> con sqlite3 y la estoy manejando con puras consultas asi:
> [...]
>
> Quisiera escuchar sus consejos, de como manejar una base de datos sql
> estandar, como mysql o mariadb.

Habría que empezar especificando qué entiendes por "base de datos sql
estándar". Lo normal es que cada gestor de base de datos, en vez de
usar SQL estándar, introduzca extensiones y variaciones que hagan
imposible que la misma sentencia SQL funcione igual en todos ellos.

En python se definió la DB-API2 (PEP-249) como un método estándar
sencillo para acceder a toda base de datos. Prácticamente, todo módulo
python para acceso a base de datos ofrece esta API, por lo que
seguirla te garantiza que tu código funcionará con cualquier base de
datos con tan sólo cambiar la cadena de conexión. Te recomiendo
empezar por ahí.

Los ORMs son una abstracción al acceso a las bases de datos
"relacionales". Por así decirlo, traduce las relaciones establecidas
entre objetos de datos en sentencias SQL concretas a la base de datos
que uses. Según el ORM, tendrás más o menos cosas que puedas hacer, y
sólo te servirá para unas cuantas bases de datos. De entre todos,
SQL-Alchemy es el más completo y potente, aunque a veces resulte más
conveniente usar el ORM específico del framework que vayas a usar por
estar mejor integrado.


Por otro lado, criticando un poco tu código: manejar bases de datos es
estar siempre preparado para el desastre. "Commit" no es sinónimo de
"guardar", si no el poner fin a una transacción según el nivel de
aislamiento que tengas entre conexiones simultáneas. Como no siempre
se tiene éxito con la transacción, siempre hay que tener en cuenta el
caso de que falle para poder realizar un "rollback". Por ejemplo, un
método "insertar" debe empezar iniciando la transacción, insertando
los datos, y terminar con un "commit", no debería ir en métodos
separados, tal como los pones. Es más, debería ejecutarse todo seguido
dentro de un "contexto" que aisle de posibles errores. Mira la
referencia [2] para hacerte una idea con sqlite3, aunque cada módulo
de acceso tiene su modo recomendado de hacerlo.


DB-API2: http://www.python.org/dev/peps/pep-0249
[2]: http://docs.python.org/2/library/sqlite3.html#using-the-connection-as-a-context-manager




-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es


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