Cuando hablamos de ORMs con python, sin duda alguna hay dos los cuales rápidamente sale a relucir, me refiero por supuesto a Peewee y SQLAclhemys, dos muy buenos ORMs que podemos implementar fácilmente en nuestros proyectos y de esta forma agilizar nuestro proceso de desarrollo. Interactuando con la base de datos a través de programación orientada a objetos.
Sin embargo, alguna vez te has preguntado ¿Cuál de estos 2 ORMs es mejor para nuestros proyectos? ¿No?, bueno yo sí, es por ello que en esta ocasión me gustaría habláramos sobre que ORM elegir entre Peeewee Y SQLAlchemy. Hablemos por supuesto de ventajas y desventajas.
Bien, sin más introducción comencemos con el vídeo.
Peewee
Comencemos hablando de Peewee. Este un ORM ligero de Python. Su sintaxis podemos catalogarla como sencilla, es fácil de utilizar y tiene soporte para los gestores de base de datos más populares en la actualidad, como lo es postgreSQL, MYSQL y SQLite.
A demás de ello es importante destacar que librerías y Frameworks como Flask o Bottle permiten la integración de Peewee de una forma muy sencilla. Con un par de líneas de código podemos tener todo el poder de Peewee en nuestro proyecto.
Aquí un pequeño ejemplo de como definir un modelo con Peewee (Recordemos que los modelos son la representación de tablas de nuestra base de datos).
class User(peewee.Model):
username = peewee.CharField(max_length=50, unique=True, index=True)
active = peewee.BooleanField(default=False)
created_at = peewee.DateTimeField(default=datetime.now)
class Meta:
database = database
db_table = 'users'
Como puedes observar la sintaxis es clara, los constraints y tipos de datos son fácilmente identificables. Además de ello es posible definir meta información acerca de nuestra tabla y modelos.
Tareas como crear, consultar, actualizar o eliminar son sencillas mediante Peewee ya que todo se hace a través de métodos y atributos, vaya, programación orientada a objetos al cien por cierto.
Veamos un ejemplo más.
User.select(
User.username,
User.email
).where(
User.active == True
).order_by(User.username)
En este ejemplo obtenemos el primer usuario cuyo atributo active sea verdadero y ordenados de forma descendente con respecto al username.
¿Bastante sencillo no lo crees?.
SQLAlchemy
Ahora hablemos acerca de SQLAlchemy.
Verás con SQLAlchemys podemos hacer exactamente todo lo que podemos hacer con Peewee. Vamos a interactuar con la base de datos mediante programación orientada a objetos. Aquí un ejemplo de un modelo.
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String)
active = Column(Boolean)
Para este ejemplo podemos ver una clara diferencia entre Peewee y SQLAlchemy, puesto que las columnas en este no son del todo fáciles de comprender. Y allí es donde podemos caer en el primer punto negativo de SQLAlchemy, la curva de aprendizaje.
SQLAlchemy es mucho más difícil de aprender y dominar que con Peewee.
Podemos confirmar esto con otro ejemplo.
session.query(User.username).filter(User.active == True).order_by(User.username.asc()).first()
Nuevamente obtenemos el primer usuario cuyo atributo active sea verdadero y ordenados de forma descendente con respecto al username. Sin embargo como puedes ver la consulta es más compleja que con Peewee.
¿Esto quiere decir que SQLAlchemy es malo? para nada, es complicado sí, pero tiene un por que, verás SQLAlchemy tiene muchos más features que Peewee, vaya posee una API más compleja.
En Peewee por ejemplo solo puedes hacer consultas mediante POO, pero con SQL Alchemys puedes implementar SQL puro, o POO ¿ o por qué no? SQL en conjunto con POO. Lo cual es algo que sin duda te será de mucha utilidad cuando quieras mejorar el performance de tus aplicaciones.
Además de ello SQLAlchemy proporciona muchas más formas diferentes de definir esquemas de base de datos, hablamos de clases, creación de tablas de forma dinámica a través de la reflexión, mediante scripts sql etc…
En general, SQLAlchemy es un ORM más complejo y versátil que Peewee, pero esto no significa que Peewee sea una mala opción. Peewee es más fácil de aprender y usar que SQLAlchemy , y es una excelente opción para proyectos más pequeños o para aquellos que no necesitan todas las funcionalidades avanzadas.
Por supuesto, la elección entre estos 2 excelentes ORMS dependerá completamente del proyecto, del equipo y el expertis de este.
En lo personal te recomiendo usar Peewee si lo que deseas es comenzar a dar tus primeros pasos con un ORM con Python o estas la transición de Flask - Django, ya que déjame decirte el ORM de Django se parece algo al de Peewee .
Por su parte te recomiendo SQLAlchemy cuando ya tengas un por más de experiencia con ORMs.
Por supuesto, si quieres conocer más a cerca de estos ORM en la descripción del vídeo te dejamos el enlace al curso de base de datos con Python donde trabajamos con estos ORMS y mucho más.