Le mappage objet-relationnel (ORM) est une technique permettant de simplifier l’accès aux données et leur manipulation dans les applications en faisant abstraction des détails de bas niveau des interactions avec la base de données. Les ORMs vous permettent de travailler avec des objets et des types dans votre langage de programmation préféré tout en s’intégrant de manière transparente aux systèmes de gestion de bases de données relationnelles (RDBMS).



Les frameworks ORM sont conçus pour être conviviaux, en particulier si vous n’êtes pas familiarisé avec le langage SQL (Structured Query Language) ou la gestion des bases de données. Les ORM fournissent une couche d’abstraction de haut niveau qui vous permet d’interagir avec les bases de données en utilisant des concepts de programmation orientés objet familiers, ce qui simplifie grandement l’intégration des applications dans les bases de données.


Rust, bases de données SQL et ORMs

Lorsque vous construisez des applications en Rust, vous pouvez avoir besoin d’une certaine forme de persistance. Vous pouvez choisir parmi de nombreux paradigmes de bases de données et bibliothèques dans l’écosystème Rust.

Supposons que vous souhaitiez travailler avec une base de données relationnelle. Dans ce cas, vous pouvez choisir entre l’utilisation de clients SQL pour exécuter des opérations SQL sur des systèmes de gestion de base de données via des requêtes SQL brutes dans vos programmes ou des ORM qui vous permettent d’utiliser les types intégrés de Rust pour travailler avec votre base de données.

L’utilisation d’ORMs dans vos applications Rust présente plusieurs avantages. Les ORMs éliminent le besoin d’écrire manuellement des requêtes complexes et sujettes aux erreurs. Au lieu de cela, vous pouvez exploiter la puissance du cadre ORM pour les opérations de base de données quotidiennes telles que l’insertion, la mise à jour et l’interrogation de données par le biais d’une API simple et intuitive. En utilisant un ORM, vous pouvez écrire des programmes Rust qui fonctionnent sur plusieurs systèmes de gestion de base de données sans avoir à réécrire des requêtes SQL spécifiques au système de gestion de base de données.

Contrairement à d’autres langages, Rust ne dispose pas d’un ORM largement adopté. Cependant, il existe de nombreux ORM dans l’écosystème Rust pour différents objectifs, supportant plusieurs bases de données, y compris Diesel, SQLx, Sled, SeaORM, et bien d’autres.


L’ORM Diesel

Capture d'écran de la page d'accueil de Diesel

Diesel est un ORM Rust qui fournit des fonctionnalités complètes permettant aux développeurs de travailler efficacement avec de multiples bases de données SQL supportées.

Diesel offre des fonctionnalités de typage fort et de sécurité du temps de compilation, une API de requête expressive, des migrations de schéma automatiques, des transactions et une gestion des erreurs, parmi d’autres fonctionnalités.

Diesel est un ORM préféré en raison de ses performances et de son efficacité, de sa sécurité et de sa fiabilité, et de la communauté active qui contribue au projet. De plus, Diesel se marie bien avec d’autres frameworks web Rust comme Rocket.

Diesel fournit un crate et un outil CLI pour les opérations de base de données.

Vous pouvez exécuter cette commande pour installer le diesel_cli pour votre base de données préférée (dans ce cas, sqlitevous remplacez l’argument par le nom de votre base de données SQL préférée supportée par le diesel).

 cargo install diesel_cli --no-default-features --features sqlite

Vous pouvez également ajouter Diesel à la liste de contrôle de votre projet. dépendances pour utiliser le crate dans votre projet.

 [dependencies]
diesel = { version = "1.4.5", features = ["sqlite"] }

Voici comment importer Diesel dans vos fichiers Rust pour les opérations de base de données de votre projet.

 use diesel::prelude::*;

Ceci importe tous les types et traits de la base de données diesel::prelude dans la portée courante. Cela permet d’utiliser facilement les fonctionnalités de Diesel sans importer explicitement chaque type ou trait.

Dans l’ensemble, Diesel est un excellent outil ORM et de base de données pour votre projet de base de données car il y a une communauté dynamique, de nombreux tutoriels en ligne, et un grand support pour la bibliothèque.


L’ORM SeaORM

capture d'écran de la page d'accueil de seaorm

SeaORM est un ORM relationnel pour Rust qui aide à construire des services web. SeaORM dispose d’un large éventail de caractéristiques et de fonctionnalités conçues pour rationaliser le processus de travail avec les bases de données, y compris la construction de requêtes puissantes, la définition et la migration de schémas, le mappage de relations, les transactions et la mise en commun de connexions avec le support d’opérations asynchrones avec la syntaxe async/await de Rust.

L’API de SeaORM est conçue pour être ergonomique et expressive, vous permettant d’écrire des requêtes et des opérations de base de données claires et concises. La syntaxe intuitive de SeaORM et les abstractions bien pensées minimisent le code standard et améliorent la productivité.

SeaORM fournit un outil CLI et un crate pour les opérations de base de données.

Voici la commande d’installation de l’outil sea-orm-cli Outil CLI :

 cargo install sea-orm-cli

Vous pouvez utiliser l’outil migrer init pour écrire un fichier de migration afin de configurer votre base de données et votre schéma.

 sea-orm-cli migrate init

Ajouter la commande orme de mer caisse au dépendances de la section Cargo.toml pour installer et utiliser SeaORM.

 [dependencies]
sea-orm = { version = "0.9" }

Après avoir installé le SeaORM, vous pouvez importer le crate dans vos fichiers Rust avec un fichier utiliser comme suit :

 use sea_orm::entity::prelude::*;

Le use sea_orm::entity::prelude::* ; importe tous les types et traits de la classe sea_orm::entity::prelude dans la portée actuelle pour vous permettre d’utiliser ces types et traits sans avoir à qualifier leurs noms avec l’attribut sea_orm::entity::prelude préfixe.

SeaORM est un excellent ORM avec une communauté dynamique et une excellente documentation descriptive pour vous aider à démarrer.


SeaORM vs Diesel

Choisir le bon ORM pour un projet Rust nécessite de prendre en compte plusieurs facteurs.

SeaORM et Diesel offrent tous deux d’excellentes performances, en exploitant les forces de Rust pour optimiser les interactions avec les bases de données. Alors que SeaORM se concentre sur la simplicité et la conception intuitive de l’API, Diesel donne la priorité aux vérifications et à la sécurité au moment de la compilation.

Voici un tableau comparant les caractéristiques et les fonctionnalités des deux ORM :

Métriques

Diesel

SeaORM

Support de base de données

PostgreSQL, MySQL, SQLite

PostgreSQL, MySQL, SQLite, SQL Server, Oracle

Constructeur de requêtes

Oui

Oui

Migration des schémas

Oui

Oui

Mise en commun des connexions

Non

Oui

Chargement paresseux

Non

Oui

Contrôles à la compilation

Oui

Oui

Documentation

Très complète mais peut être plus difficile pour les débutants

Complet avec des exemples clairs

Soutien à la communauté

Établi avec une plus grande base d’utilisateurs, de nombreuses ressources et des canaux de discussion.

Croissance rapide avec un dépôt GitHub actif et des contributeurs

Le choix entre Diesel et SeaORM dépend des spécifications de votre projet. Diesel bénéficie d’un soutien établi de la part de la communauté et est préféré pour ses fonctionnalités robustes et ses performances. Diesel convient si vous donnez la priorité aux vérifications à la compilation, à la sécurité et à la simplicité.

D’un autre côté, SeaORM est nouveau et prolifère, avec le support de plus de moteurs de base de données SQL et le chargement paresseux. SeaORM pourrait être meilleur si vous donnez la priorité à la conception d’API intuitives et à la productivité.

Les deux ORM prennent en charge les requêtes, la migration des schémas et les vérifications au moment de la compilation. Tenez compte du système de gestion de base de données que vous utilisez et de la taille de votre projet avant de prendre une décision.


Diesel facilite le travail avec les bases de données

La communauté open-source de Rust continue à faire des progrès significatifs dans l’amélioration de la maturité et de la fonctionnalité des packages et ORMs existants et à venir.

Diesel est considéré comme l’un des ORM les plus populaires de l’écosystème Rust. L’adoption généralisée de Diesel témoigne de ses fonctionnalités robustes, de ses performances efficaces et du soutien actif de la communauté. L’équipe de développement de Diesel se consacre à l’amélioration et à l’expansion de ses capacités afin de s’assurer qu’il reste une solution ORM fiable et robuste pour les développeurs Rust.