Travailler avec les bases de données en Rust : PostgreSQL et MongoDB

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course
```html

Introduction au travail avec les bases de données en langage Rust



Le langage Rust gagne rapidement en popularité dans la programmation système, mais ses capacités vont bien au-delà des tâches de bas niveau. Grâce à son système de types strict, sa sécurité mémoire et ses hautes performances, Rust devient un excellent choix pour créer des applications serveur fiables fonctionnant avec des bases de données. Dans cet article, nous allons détailler comment se connecter et effectuer des opérations avec deux SGBD populaires : le relationnel PostgreSQL et l'orienté documents MongoDB.



Nous examinerons les bibliothèques principales (crates), telles que diesel pour PostgreSQL et le driver officiel mongodb, et montrerons des exemples d'opérations CRUD en Rust pur. Cet article sera utile aussi bien aux débutants qu'aux développeurs expérimentés souhaitant élargir leur stack technologique.



1. Travailler avec PostgreSQL : la crate Diesel



Diesel est un ORM et constructeur de requêtes sûr et extensible pour Rust. Il assure la vérification des types à la compilation, ce qui élimine de nombreuses erreurs d'exécution liées aux requêtes SQL. Pour commencer, il faut ajouter les dépendances dans le fichier Cargo.toml.



Installation et configuration



Ajoutez les crates suivantes :



[dependencies]diesel = { version = "2.1", features = ["postgres"] }dotenvy = "0.15"serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"tokio = { version = "1.0", features = ["full"] }


Installez également l'utilitaire en ligne de commande Diesel CLI :



cargo install diesel_cli --no-default-features --features postgres


Créez un fichier .env à la racine du projet avec l'URL de votre base de données :



DATABASE_URL=postgres://username:password@localhost/my_database


Exécutez la commande pour configurer les migrations :



diesel setupdiesel migration generate create_users


Définition du schéma et du modèle



Dans le fichier de migration up.sql, écrivez le SQL pour créer la table :



CREATE TABLE users (    id SERIAL PRIMARY KEY,    name VARCHAR NOT NULL,    email VARCHAR NOT NULL UNIQUE,    age INTEGER NOT NULL);


Exécutez ensuite diesel migration run. Après cela, générez le schéma Rust (fichier src/schema.rs) avec :



diesel print-schema > src/schema.rs


Définissons maintenant le modèle et la structure pour l'insertion de données :



// src/models.rsuse diesel::prelude::*;use serde::{Deserialize, Serialize};use crate::schema::users;

#[derive(Queryable, Selectable, Serialize, Deserialize)]#[diesel(table_name = users)]pub struct User { pub id: i32, pub name: String, pub email: String, pub age: i32,}

#[derive(Insertable, Deserialize)]#[diesel(table_name = users)]pub struct NewUser { pub name: String, pub email: String, pub age: i32,}


Opérations CRUD avec PostgreSQL



Examinons les opérations principales. Connexion à la base de données et création d'un nouvel utilisateur :



use diesel::prelude::*;use dotenvy::dotenv;use std::env;

use crate::models::{NewUser, User};use crate::schema::users::dsl::*;

pub fn establish_connection() -> PgConnection { dotenv().ok(); let database_url = env::var("DATABASE_URL") .expect("DATABASE_URL must be set"); PgConnection::establish(&database_url) .expect(&format!("Error connecting to {}", database_url))}

pub fn create_user(conn: &mut PgConnection, name: &str, email: &str, age: i32) -> User { let new_user = NewUser { name: name.to_string(), email: email.to_string(), age, };

diesel::insert_into(users) .values(&new_user) .returning(User::as_returning()) .get_result(conn)```

Blogs

Book Recommendations