Lär dig programmera i Rust · Lektion

Ansluta till en databas

sqlx-pooler

Lektion 1 av 413 steg

Ansluta till en databas är en gratis lektion i Lär dig programmera i Rust på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lär dig programmera i Rust, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lär dig programmera i Rust innehåller totalt 4 lektioner.

Vad är sqlx?

sqlx är ett asynkront SQL-verktyg skrivet helt i Rust. Det är inte ett ORM; du skriver riktig SQL men får kontroll vid kompilering och typsäkra resultat.

  • Stöder Postgres, MySQL och SQLite
  • Bygger på asynkrona runtime-miljöer som Tokio

Lägga till sqlx

Deklarera sqlx med de runtime- och databasfunktioner du behöver. Detta redigerar Cargo.toml och körs i terminalen.

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

Anslutningssträngar

En anslutningssträng (DSN) talar om för sqlx hur databasen nås.

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

Varför använda en anslutningspool?

Det är långsamt att öppna en anslutning för varje fråga. En pool håller en uppsättning återanvändbara anslutningar, lämnar ut dem vid behov och tar sedan tillbaka dem.

  • Begränsar samtidigheten
  • Fördelar kostnaden för anslutningar över flera användningar

Skapa en pool

Använd PgPoolOptions för att konfigurera och ansluta en pool. Detta görs vanligtvis en gång vid uppstart.

use sqlx::postgres::PgPoolOptions;

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

Konfigurera poolen

Finjustera poolen med alternativ som maximalt antal anslutningar och tidsgräns för att hämta en anslutning, så att den passar arbetsbelastningen.

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

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

En enkel fråga via poolen

Skicka poolen (eller en referens till den) som executor för att köra en fråga. Poolen hämtar automatiskt en anslutning.

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
}

Modellera en pool i ren Rust

En pool är begreppsmässigt en begränsad samling återanvändbara resurser. Det här körbara exemplet skissar på hur resurser hämtas och lämnas tillbaka.

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());
}

Läsa DSN från miljön

Håll hemligheter borta från källkoden. Läs DATABASE_URL från miljön vid uppstart.

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()
}

Det är billigt att klona

En Pool använder referensräkning internt. När den klonas delas samma underliggande anslutningar, så du kan fritt skicka kloner till tasks.

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;
    });
}

Stänga poolen

Vid avstängning anropar du close().await för att på ett ordnat sätt tömma och stänga alla anslutningar.

use sqlx::{Pool, Postgres};

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

Snabbkontroll

Testa dina kunskaper om anslutning med sqlx.

Sammanfattning

Du har lärt dig att ansluta med sqlx:

  • sqlx är ett asynkront, typsäkert SQL-verktyg, inte ett ORM
  • En DSN beskriver var databasen finns
  • Använd PgPoolOptions för att skapa en pool med begränsningar och tidsgränser
  • Pooler är billiga att klona och bör stängas vid avstängning

Nästa steg: frågor som kontrolleras vid kompilering.

Gratis att börja

Lär dig Rust med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
39
Lektioner
144

Vanliga frågor

Är lektionen ”Ansluta till en databas” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lär dig programmera i Rust, inklusive ”Ansluta till en databas”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lär dig programmera i Rust innehåller totalt 4 lektioner.

Vad lär jag mig i ”Ansluta till en databas”?

sqlx-pooler Ni övar på Lär dig programmera i Rust med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lär dig programmera i Rust?

Du behöver inga förkunskaper. Utbildningen i Lär dig programmera i Rust på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Ansluta till en databas”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lär dig programmera i Rust-lektionen?

Ja. Varje Lär dig programmera i Rust-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Ansluta till en databas
  2. Kompileringstidssäkrade frågor
  3. CRUD-operationer
  4. Migreringar
← Tillbaka till Lär dig programmera i Rust