SQLAlchemy, un kit de herramientas SQL y el mapeador relacional de objetos open source
Hace poco el equipo a cargo de SQLAlchemy, la herramienta SQL de código abierto y un mapeo objeto-relacional escrito en Python, dio a conocer el lanzamiento de la nueva versión 2.0.
Para quienes desconocen de SQLAlchemy, deben saber que es un kit de herramientas SQL de Python y el mapeador relacional de objetos, proporciona un conjunto integral de modelos de persistencia bien conocidos diseñados para un acceso a bases de datos eficiente y de alto rendimiento, adaptado en un lenguaje de dominio Pythonic simple.
Principales novdedades de SQLAlchemy 2.0
La nueva versión 2.0 de SQLAlchemy llega con cambios significativos en la API en comparación con la serie 1.4, con ello, es importante tomar en cuenta las aplicaciones que funcionan con la serie 1.x y no han pasado por el proceso de migración deben asegurarse de que se definan los requisitos para mantener en su lugar la serie principal de versiones de SQLAlchemy deseada.
SQLAlchemy 2.0 integra nuevas sintaxis ORM compatibles con pep-484 sin complemento:el estilo declarativo ORM de la configuración del mapeador ahora tiene un aspecto completamente nuevo, tomando mucho prestado de sistemas como las clases de datos de Python y SQLModel para proporcionar declaraciones ORM basadas en anotaciones, utilizando la interpretación en tiempo de ejecución de las anotaciones pep-484 para producir clases mapeadas que están completamente tipeadas y son compatibles con cualquier tipo de comprobador o IDE.
Otro de los cambios que se destaca de esta nueva versión de SQLAlchemy 2.0 es que introduce soporte para una clase asignada declarativa anotada que se puede generar directamente como una clase de datos de Python; esto da como resultado una clase mapeada ORM declarada como cualquier otra clase, con métodos de clase de datos generados automáticamente. Este nuevo enfoque se ha mejorado enormemente con respecto a los enfoques «híbridos» tentativos introducidos en SQLAlchemy 1.4.
Ademas de ello, tambien podremos encontrar que presenta optimizaciones en schema reflection architecture la cual es básicamente casi nueva, ya que, ahora las operaciones que reflejan esquemas completos a la vez, como MetaData.reflect y las operaciones de todo el esquema recientemente agregadas con la construcción inspec, ahora se basan en una base que asume operaciones que operan en cientos o miles de tablas a la vez, en lugar de una tabla a la vez.
La nueva arquitectura está habilitada para backends de PostgreSQL y Oracle, que fueron los dos backends con los mayores problemas de rendimiento para esquemas grandes, donde otorga una mejora del 250 % para PostgreSQL y del 900 % para Oracle. El dialecto de SQL Server es el próximo objetivo de la nueva arquitectura. Cualquier dialecto de terceros puede optar por el nuevo sistema de «muchas mesas a la vez» o permanecer en el antiguo enfoque de «mesa a la vez», que sigue siendo totalmente compatible sin cambios.
Por otra parte, se propone un enfoque completamente nuevo para INSERT, totalmente integrado con ORM, que suele ser un orden de magnitud más rápido en la mayoría de los backends: la mayoría de las bases de datos y los controladores admitidos por SQLAlchemy ahora agregaron o mejoraron su soporte para la sintaxis INSERT RETURNING.
La nueva versión de SQLAlchemy 2.0 tomó la oportunidad de admitir y mejorar el soporte de RETURNING para todos sus backends, con la única excepción de MySQL (solo MySQL; MariaDB admite cargas de RETURNING).
Parte de esta mejora es la capacidad de insertar miles de filas en una sola declaración por lotes que también devuelve un conjunto completo de valores generados por el servidor que necesita el ORM, lo que nunca antes fue posible, con la única excepción de una implementación tentativa que se basó en el controlador psycopg2.
En la versión 2.0 se ha trabajado en optimizar INSERT para todos los backends, de modo que miles de objetos ORM con o sin claves principales y esta capacidad está completamente integrada en el ORM para todas las operaciones INSERT, tanto para operaciones ORM de unidad de trabajo «normales» como para enfoques «en masa», que también se revisaron recientemente en la versión 2.0.
Finalmente, si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.
Cabe mencionar que la nueva versión de SQLAlchemy 2.0 es una versión lo suficientemente significativa como para tener dos guías de migración: la principal guía de migración explica cómo garantizar la compatibilidad de API para que una aplicación funcione en SQLAlchemy 1.4 o 2.0.