SQLX - toolkit SQL de código abierto basado en Rust
(github.com/launchbadge)- Crate SQL puro basado en Rust con enfoque asíncrono (
async), que permite validar consultas SQL en tiempo de compilación sin DSL usando macros de Rust- ¡No es un ORM!: ideal para proyectos que quieren usar SQL tal cual, sin ORM
- Soporta bases de datos como PostgreSQL, MySQL, MariaDB, SQLite
- Puedes definir
DATABASE_URLen el archivo.envpara hacer verificaciones fácilmente en tiempo de compilación
- Puedes definir
- Implementación Pure Rust (el driver de MySQL/MariaDB está escrito 100% en Rust; SQLite se integra con una librería en C), diseñada de forma segura sin usar código
unsafe, lo que le da alta confiabilidad - Compatible con los principales runtimes asíncronos de Rust como Tokio, async-std, actix, así como con varios backends TLS, y puede usarse de forma independiente de la plataforma
- Licencia dual MIT/Apache 2.0, por lo que puede aprovecharse ampliamente en proyectos de código abierto y comerciales
Funciones principales
- Connection pooling con
sqlx::Pool - Streaming asíncrono de rows desde la base de datos
- Preparación y caché automática de consultas por conexión
- También permite ejecutar fácilmente consultas no preparadas (no
Prepared), devolviendo los resultados en el mismo tipo de row - Soporte para conexiones cifradas con TLS en las BD compatibles (MySQL, MariaDB, PostgreSQL)
- Soporte para notificaciones asíncronas de PostgreSQL:
LISTENyNOTIFY - Soporte para transacciones anidadas usando savepoints
- Soporte para
AnyPool, que permite cambiar el driver de base de datos de forma selectiva en tiempo de ejecución
6 comentarios
Personalmente, me gusta el enfoque de
sqlcde Go.Básicamente, consiste en escribir primero consultas nativas y luego generar el código.
El problema de no poder serializar campos con intercalación
_bincomoStringlleva más de un año sin corregirse, así que resulta difícil recomendarlo para uso en producción. Incluso es una regresión, por lo que muchos usuarios y bibliotecas siguen quedándose en la versión 0.7.Parece que al final sí lo arreglaron, pero les tomó casi un año.
¿Podrías compartir el enlace del issue? Estuve buscando un poco, pero me costó encontrarlo.
https://github.com/launchbadge/sqlx/issues/3387
Creo que es este
SQLx - Rust SQL Toolkit
Lo compartí una vez hace 5 años, pero desde entonces ha habido bastantes cambios.
Ahora ya es posible validarlo en tiempo de compilación conectándose a una DB real,
es compatible incluso con tokio/async-std/actix,
y se han reforzado funciones y pruebas útiles para uso en producción, como pool de conexiones, transacciones anidadas y AnyPool, por lo que ya puede aplicarse también a servicios de gran escala; es un proyecto recomendable para proyectos que usan SQL directamente sin ORM.
Y además, a través de sqlx han surgido proyectos como SeaORM y Welds, que implementan ORM.
También están SeaQuery, que es un query builder, y SQLPage, que es un framework de aplicaciones web.