SQLX - boîte à outils SQL open source basée sur Rust
(github.com/launchbadge)- Crate SQL asynchrone (
async) en pur Rust, qui permet, via les macros Rust, de valider les requêtes SQL à la compilation sans DSL- Ce n'est pas un ORM ! : idéal pour les projets qui veulent utiliser SQL tel quel sans ORM
- Prise en charge de bases de données comme PostgreSQL, MySQL, MariaDB, SQLite
- Il suffit de définir
DATABASE_URLdans le fichier.envpour effectuer facilement une vérification à la compilation
- Il suffit de définir
- Implémentation Pure Rust (le pilote MySQL/MariaDB est écrit à 100 % en Rust ; SQLite s'appuie sur une bibliothèque C), conçue de manière sûre sans utiliser de code
unsafe, ce qui renforce sa fiabilité - Compatible avec les principaux runtimes asynchrones Rust comme Tokio, async-std, actix, ainsi qu'avec divers backends TLS, et peut être utilisé de façon indépendante de la plateforme
- Sous double licence MIT/Apache 2.0, utilisable largement dans des projets open source comme commerciaux
Fonctionnalités principales
- Pooling de connexions avec
sqlx::Pool - Streaming asynchrone de lignes depuis la base de données
- Préparation et mise en cache automatiques des requêtes pour chaque connexion
- Exécution simple de requêtes non préparées (non-Prepared), avec un résultat renvoyé sous le même type de ligne
- Prise en charge des connexions chiffrées TLS pour les bases prises en charge (MySQL, MariaDB, PostgreSQL)
- Prise en charge des notifications PostgreSQL asynchrones :
LISTENetNOTIFY - Prise en charge des transactions imbriquées à l'aide de savepoints
- Prise en charge de
AnyPool, qui permet de remplacer le pilote de base de données de manière sélective à l'exécution
6 commentaires
Personnellement, j’aime l’approche de
sqlcen Go.Elle consiste d’abord à écrire des requêtes natives, puis à générer le code.
Le problème qui empêche de sérialiser en
Stringles champs avec collation_binn’est toujours pas corrigé depuis plus d’un an, donc cela semble difficile à utiliser en production. Comme il s’agit même d’une régression, de nombreux utilisateurs et bibliothèques restent bloqués sur la version 0.7.On dirait que c’est corrigé, mais ça a quand même pris presque un an.
Pourriez-vous partager le lien vers l’issue ? J’ai cherché un peu, mais c’est difficile à trouver.
https://github.com/launchbadge/sqlx/issues/3387
Je pense que c’est ça
SQLx - Rust SQL Toolkit
Je l’avais déjà partagé une fois il y a 5 ans. Entre-temps, il y a eu pas mal de changements.
Il est désormais possible d’effectuer une validation à la compilation en se connectant à une vraie base de données,
et la compatibilité s’étend jusqu’à tokio/async-std/actix,
avec un pool de connexions, des transactions imbriquées, AnyPool et d’autres fonctionnalités et tests renforcés réellement utiles en production, au point de pouvoir être adopté même pour des services de grande envergure.
C’est devenu un projet recommandable pour les projets qui utilisent directement SQL sans ORM.
Et des projets comme SeaORM et Welds, qui implémentent un ORM via sqlx, ont aussi vu le jour.
Il y a également des choses comme le query builder SeaQuery ou le framework d’applications web SQLPage.