Hace tiempo que no hablo de Python, no porque no tenga cosas que contar, sino porque he estado centrado en lo que ya he expuesto por aquí, y no he ampliado en otros campos. En la entrada de hoy, les presento SQLAlchemy, una potente libreria de Python para trabajar con bases de datos relacionales.
El concepto base es la antípoda a lo que yo siempre he hecho (aun debo replantearme esta nueva vía de programación):
El uso de objetos normales de Python para representar tablas de las bases de datos y la ejecución de consultas
Hay una serie de beneficios que favorecen esta nueva aproximación:
- El desarrollo de la aplicación es realizado completamente en Python
- Abstracción del modelo sin preocuparse del motor de bases de datos a utilizar. Se trata de que te ocupes del mdelo, que SQLAlquemy se encarga de preparar las SQL para trabajar con el motor de base de datos que elijas, bien sea, SQLite, Oracle, MySQL, …
- Los errores en la base de datos se reducen, porque hay 2 capas entre la aplicación y la base de datos: el propio intérprete de Python, y SQLAlchemy con toda su API definida y preparada para la verificación de errores ya preparada.
- El código de la base de datos es muy eficiente
- Aplicar ORM, o sea, Object Relational Mapping, un mapeo de objetos relacional, hace que el código sea más fácil y cómodo de mantener, siempre con el mantra de “no te repitas” (DRY, Don’t repeat yourself).
- SQLAlchemy ayuda a evitar vulnerabilidades por injecciones SQL
- Excelente soporte de la comunidad
- Amplio abanico de librerias adicionales
Con semejante abanico de bondades, ¿donde está lo malo?
Evidentemente, si estás acostumbrado a trabajar en la base de datos directamente, este nuevo concepto te costará adaptarte, que es lo que me pasa a mi.
Aplicar ORM tiene sus ventajas, porque si realizas una modificación en una tabla, si lo haces directamente sobre la base de datos, necesitarás modificar además todas las consultas, mientras que si lo haces a través de un ORM, el propio ORM se encarga de todo una vez que definas las clases.
Ideal para trabajar con Flask
Cómo sabeis, tengo predilección por Flask frente a otros frameworks o microframeworks de Python, así que los propios desarrolladores de Flask han adaptado una extensión flask-sqlalchemy para no reinventar la rueda.
Los motores de bases de datos soportados son:
- SQLite
- MySQL
- PostgreSQL
- Firebird
- Microsoft SQL Server
- Oracle
Según el motor que vayas a utilizar, seria conveniente que instalaras los módulos necesarios para el funcionamiento, pues no están instalados muchos de serie (SQLite si viene con Python standar).
Sinceramente, dado que me desenvuelvo bastante bien con SQL, me da mucha pereza (bueno, y en parte desconocimiento) trabajar con ORM como SQLAlchemy, porque me gusta tener yo control, pero sí es cierto de que tiene sus ventajas, pues es el motor el que se encarga de preprar las distintas sentencias, acomodadas según el motor, puesto que cómo deberias saber, las instrucciones SQL pueden variar de un motor a otro.
Pues nada, habrá que ponerse manos a la obra!
Happy coding!