14 points par xguru 2025-08-04 | 6 commentaires | Partager sur WhatsApp
  • 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_URL dans le fichier .env pour effectuer facilement une vérification à la compilation
  • 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 : LISTEN et NOTIFY
  • 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

 
secret3056 2025-08-04

Personnellement, j’aime l’approche de sqlc en Go.

Elle consiste d’abord à écrire des requêtes natives, puis à générer le code.

 
mokaa 2025-08-04

Le problème qui empêche de sérialiser en String les champs avec collation _bin n’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.

 
secret3056 2025-08-04

On dirait que c’est corrigé, mais ça a quand même pris presque un an.

 
unsure4000 2025-08-04

Pourriez-vous partager le lien vers l’issue ? J’ai cherché un peu, mais c’est difficile à trouver.

 
yshrust 2025-08-04
 
xguru 2025-08-04

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.