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

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

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

\n\n

Rust est un langage de programmation système moderne qui gagne en popularité grâce à ses performances et sa sécurité. Mais comment travailler avec des bases de données en Rust ? Dans cet article, nous allons aborder la connexion et l'exécution des opérations de base avec deux SGBD populaires : le relationnel PostgreSQL et l'orienté documents MongoDB. Ce contenu est destiné aux développeurs débutants connaissant les bases de Rust.

\n\n

Pourquoi Rust et les bases de données sont-ils une bonne combinaison ?

\n\n

Rust offre un système de types strict et des garanties de sécurité mémoire, ce qui est particulièrement précieux lors du travail avec des données. Les erreurs d'accès mémoire, typiques en C/C++, sont éliminées dès la compilation. De plus, l'écosystème Rust comprend des bibliothèques matures pour interagir avec les bases de données : diesel pour PostgreSQL et le pilote officiel pour MongoDB.

\n\n

Dans cet article, nous allons apprendre à :

\n
    \n
  • Se connecter à PostgreSQL et MongoDB depuis Rust
  • \n
  • Effectuer des opérations CRUD (création, lecture, mise à jour, suppression)
  • \n
  • Travailler avec les résultats de requêtes de manière sécurisée et efficace
  • \n
\n\n

1. Travailler avec PostgreSQL via la bibliothèque Diesel

\n\n

Diesel est un ORM et un constructeur de requêtes pour Rust qui assure la sécurité des types au moment de la compilation. Pour commencer, ajoutez les dépendances dans Cargo.toml :

\n\n
[dependencies]\ndiesel = { version = "2.1", features = ["postgres"] }\ndotenvy = "0.15"\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"\ntokio = { version = "1.0", features = ["full"] }
\n\n

Configuration de la connexion

\n\n

Créez un fichier .env avec l'URL de votre base de données :

\n\n
DATABASE_URL=postgres://user:password@localhost/mydb
\n\n

Écrivons maintenant le code pour la connexion et la création d'une table :

\n\n
use diesel::prelude::*;\nuse diesel::pg::PgConnection;\nuse dotenvy::dotenv;\nuse std::env;\n\npub fn establish_connection() -> PgConnection {\n    dotenv().ok();\n    let database_url = env::var("DATABASE_URL")\n        .expect("DATABASE_URL must be set");\n    PgConnection::establish(&database_url)\n        .unwrap_or_else(|_| panic!("Error connecting to {}", database_url))\n}
\n\n

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

\n\n

Créons une table users et le modèle Rust correspondant :

\n\n
// schema.rs\ntable! {\n    users (id) {\n        id -> Int4,\n        name -> Varchar,\n        email -> Varchar,\n        created_at -> Timestamp,\n    }\n}\n\n// models.rs\n#[derive(Queryable, Selectable)]\n#[diesel(table_name = crate::schema::users)]\n#[diesel(check_for_backend(diesel::pg::Pg))]\npub struct User {\n    pub id: i32,\n    pub name: String,\n    pub email: String,\n    pub created_at: chrono::NaiveDateTime,\n}\n\n#[derive(Insertable)]\n#[diesel(table_name = crate::schema::users)]\npub struct NewUser {\n    pub name: String,\n    pub email: String,\n}
\n\n

Opérations CRUD

\n\n

Exemple de création et de lecture d'utilisateurs :

\n\n
use crate::models::{User, NewUser};\nuse crate::schema::users;\n\npub fn create_user(conn: &mut PgConnection, name: &str, email: &str) -> User {\n    let new_user = NewUser {\n        name: name.to_string(),\n        email: email.to_string(),\n    };\n\n    diesel::insert_into(users::table)\n        .values(&new_user)\n        .returning(User::as_returning())\n        .get_result(conn)\n        .expect("Error saving new user")\n}\n\npub fn get_all_users(conn: &mut PgConnection) -> Vec {\n    users::table\n        .load::(conn)\n        .expect("Error loading users")\n}
\n\n

Comme vous pouvez le voir, Diesel vérifie les types et les noms de colonnes au moment de la compilation. Une erreur dans le nom d'un champ entraînera une erreur de compilation, et non un échec à l'exécution.

\n\n

2. Travailler avec MongoDB via le pilote officiel

\n\n

MongoDB est une base de données NoSQL qui stocke les données dans un format similaire à JSON.

Blogs

Book Recommendations