El día 22 de septiembre de 2013 21:16, <revxf...@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 _______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/