Mit einer Datenbank verbinden
sqlx-Pools
Mit einer Datenbank verbinden ist eine kostenlose Learn Rust Coding-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Learn Rust Coding-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.
Was ist sqlx?
sqlx ist ein asynchrones SQL-Toolkit, das vollständig in Rust geschrieben ist. Es ist kein ORM: Sie schreiben echtes SQL und erhalten dennoch Prüfungen zur Compile-Zeit sowie typsichere Ergebnisse.
- Unterstützt Postgres, MySQL und SQLite
- Baut auf asynchronen Laufzeitumgebungen wie Tokio auf
sqlx hinzufügen
Geben Sie sqlx mit der benötigten Laufzeitumgebung und den erforderlichen Datenbank-Features an. Dadurch wird Cargo.toml bearbeitet und ein Befehl in Ihrem Terminal ausgeführt.
[dependencies]
sqlx = { version = "0.7", features = ["runtime-tokio", "postgres"] }
tokio = { version = "1", features = ["full"] }Verbindungszeichenfolgen
Eine Verbindungszeichenfolge (DSN) teilt sqlx mit, wie die Datenbank erreicht werden kann.
- Postgres:
postgres://user:pass@host:5432/dbname - SQLite:
sqlite://app.db
Warum ein Verbindungspool?
Für jede Abfrage eine Verbindung zu öffnen ist langsam. Ein Pool hält mehrere wiederverwendbare Verbindungen bereit, gibt sie bei Bedarf aus und nimmt sie anschließend wieder zurück.
- Begrenzt die Parallelität
- Verteilt die Kosten für den Verbindungsaufbau
Einen Pool erstellen
Verwenden Sie PgPoolOptions, um einen Pool zu konfigurieren und eine Verbindung herzustellen. Dies geschieht normalerweise einmal beim Start.
use sqlx::postgres::PgPoolOptions;
async fn connect() -> sqlx::Pool<sqlx::Postgres> {
PgPoolOptions::new()
.max_connections(5)
.connect("postgres://user:pass@localhost/app")
.await
.unwrap()
}Den Pool konfigurieren
Passen Sie den Pool mit Optionen wie der maximalen Verbindungsanzahl und dem Timeout beim Abrufen einer Verbindung an Ihre Arbeitslast an.
use sqlx::postgres::PgPoolOptions;
use std::time::Duration;
fn options() -> PgPoolOptions {
PgPoolOptions::new()
.max_connections(10)
.acquire_timeout(Duration::from_secs(3))
}Eine einfache Abfrage über den Pool
Übergeben Sie den Pool oder eine Referenz darauf als Executor, um eine Abfrage auszuführen. Der Pool leiht automatisch eine Verbindung aus.
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
}Einen Pool in einfachem Rust modellieren
Ein Pool ist konzeptionell eine begrenzte Sammlung wiederverwendbarer Ressourcen. Dieses ausführbare Beispiel skizziert das Ausleihen und Zurückgeben.
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());
}Die DSN aus der Umgebung lesen
Halten Sie Geheimnisse aus dem Quellcode heraus. Lesen Sie DATABASE_URL beim Start aus der Umgebung.
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()
}Klonen ist günstig
Ein Pool verwendet intern eine Referenzzählung. Durch das Klonen greifen Sie auf dieselben zugrunde liegenden Verbindungen zu, sodass Sie Klone problemlos an Tasks übergeben können.
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;
});
}Den Pool schließen
Rufen Sie beim Herunterfahren close().await auf, um alle Verbindungen kontrolliert zu leeren und zu schließen.
use sqlx::{Pool, Postgres};
async fn shutdown(pool: Pool<Postgres>) {
pool.close().await;
}Kurzer Test
Testen Sie Ihr Verständnis der Verbindung mit sqlx.
Zusammenfassung
Sie haben gelernt, mit sqlx eine Verbindung herzustellen:
- sqlx ist ein asynchrones, typsicheres SQL-Toolkit und kein ORM
- Eine DSN beschreibt den Standort der Datenbank
- Verwenden Sie
PgPoolOptions, um einen Pool mit Limits und Timeouts zu erstellen - Pools lassen sich kostengünstig klonen und sollten beim Herunterfahren geschlossen werden
Als Nächstes: zur Compile-Zeit geprüfte Abfragen.
Häufig gestellte Fragen
Ist die Lektion „Mit einer Datenbank verbinden“ kostenlos?
Ja — der vollständige Text von „Mit einer Datenbank verbinden“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Learn Rust Coding-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Mit einer Datenbank verbinden“?
sqlx-Pools Du übst Learn Rust Coding mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Learn Rust Coding zu starten?
Keine Vorkenntnisse erforderlich. Learn Rust Coding auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Mit einer Datenbank verbinden“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Learn Rust Coding-Lektion Code schreiben und ausführen?
Ja. Jede Learn Rust Coding-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Mit einer Datenbank verbinden
- Zur Compile-Zeit geprüfte Queries
- CRUD-Operationen
- Migrationen