0Pricing
Learn Rust Coding · Leçon

Connexion à une base de données

Pools sqlx

Connexion à une base de données est une leçon Learn Rust Coding gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn Rust Coding, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn Rust Coding comprend 4 leçons au total.

Qu’est-ce que sqlx ?

sqlx est une boîte à outils SQL asynchrone entièrement écrite en Rust. Ce n’est pas un ORM : vous écrivez du SQL réel tout en bénéficiant d’une vérification à la compilation et de résultats sûrs du point de vue des types.

  • Prend en charge Postgres, MySQL et SQLite
  • Repose sur des environnements d’exécution asynchrones comme Tokio

Ajouter sqlx

Déclarez sqlx avec les fonctionnalités d’environnement d’exécution et de base de données dont vous avez besoin. Cette opération modifie Cargo.toml et s’exécute dans votre terminal.

[dependencies]
sqlx = { version = "0.7", features = ["runtime-tokio", "postgres"] }
tokio = { version = "1", features = ["full"] }

Chaînes de connexion

Une chaîne de connexion (DSN) indique à sqlx comment accéder à la base de données.

  • Postgres : postgres://user:pass@host:5432/dbname
  • SQLite : sqlite://app.db

Pourquoi utiliser un pool de connexions ?

Ouvrir une connexion pour chaque requête est lent. Un pool conserve un ensemble de connexions réutilisables, les distribue selon les besoins, puis les récupère.

  • Limite la concurrence
  • Répartit le coût des connexions

Créer un pool

Utilisez PgPoolOptions pour configurer un pool et vous y connecter. Cette opération est généralement effectuée une seule fois au démarrage.

use sqlx::postgres::PgPoolOptions;

async fn connect() -> sqlx::Pool<sqlx::Postgres> {
    PgPoolOptions::new()
        .max_connections(5)
        .connect("postgres://user:pass@localhost/app")
        .await
        .unwrap()
}

Configurer le pool

Ajustez le pool avec des options telles que le nombre maximal de connexions et le délai d’attente d’acquisition, afin de l’adapter à votre charge de travail.

use sqlx::postgres::PgPoolOptions;
use std::time::Duration;

fn options() -> PgPoolOptions {
    PgPoolOptions::new()
        .max_connections(10)
        .acquire_timeout(Duration::from_secs(3))
}

Une requête simple via le pool

Transmettez le pool, ou une référence vers celui-ci, comme exécuteur pour lancer une requête. Le pool réserve automatiquement une connexion.

use sqlx::Pool;
use sqlx::Postgres;

async fn ping(pool: &Pool<Postgres>) -> i32 {
    let row: (i32,) = sqlx::query_as("SELECT 1")
        .fetch_one(pool)
        .await
        .unwrap();
    row.0
}

Modéliser un pool en Rust simple

Conceptuellement, un pool est une collection limitée de ressources réutilisables. Cet exemple exécutable esquisse leur réservation et leur restitution.

struct Pool { available: u32, max: u32 }

impl Pool {
    fn acquire(&mut self) -> bool {
        if self.available > 0 { self.available -= 1; true } else { false }
    }
    fn release(&mut self) { self.available += 1; }
}

fn main() {
    let mut p = Pool { available: 2, max: 2 };
    println!("{}", p.acquire());
    println!("{}", p.acquire());
    println!("{}", p.acquire());
    p.release();
    println!("{}", p.acquire());
}

Lire le DSN depuis l’environnement

Ne stockez pas les secrets dans le code source. Lisez DATABASE_URL depuis l’environnement au démarrage.

use sqlx::postgres::PgPoolOptions;

async fn connect() -> sqlx::Pool<sqlx::Postgres> {
    let url = std::env::var("DATABASE_URL").unwrap();
    PgPoolOptions::new().connect(&url).await.unwrap()
}

Le clonage est peu coûteux

Un Pool utilise en interne un comptage de références. Le cloner partage les mêmes connexions sous-jacentes, ce qui vous permet de transmettre librement les copies aux tâches.

use sqlx::{Pool, Postgres};

async fn spawn_work(pool: Pool<Postgres>) {
    let p2 = pool.clone();
    tokio::spawn(async move {
        let _ = sqlx::query("SELECT 1").execute(&p2).await;
    });
}

Fermer le pool

À l’arrêt, appelez close().await pour vider progressivement le pool et fermer toutes les connexions proprement.

use sqlx::{Pool, Postgres};

async fn shutdown(pool: Pool<Postgres>) {
    pool.close().await;
}

Vérification rapide

Vérifiez votre compréhension de la connexion avec sqlx.

Récapitulatif

Vous avez appris à vous connecter avec sqlx :

  • sqlx est une boîte à outils SQL asynchrone et à typage sûr, pas un ORM
  • Un DSN décrit l’emplacement de la base de données
  • Utilisez PgPoolOptions pour créer un pool avec des limites et des délais d’attente
  • Les pools sont faciles à cloner et doivent être fermés lors de l’arrêt

Ensuite : les requêtes vérifiées à la compilation.

Questions Fréquemment Posées

La leçon « Connexion à une base de données » est-elle gratuite ?

Oui — le texte complet de « Connexion à une base de données » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn Rust Coding, passe à CoddyKit PRO. Le cours Learn Rust Coding comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Connexion à une base de données » ?

Pools sqlx Tu pratiques Learn Rust Coding avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Learn Rust Coding ?

Aucune expérience préalable n'est requise. Learn Rust Coding sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Connexion à une base de données » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Learn Rust Coding ?

Oui. Chaque leçon Learn Rust Coding inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Connexion à une base de données
  2. Requêtes vérifiées à la compilation
  3. Opérations CRUD
  4. Migrations
← Retour à Learn Rust Coding