Arbeiten mit Datenbanken in Rust: PostgreSQL und MongoDB

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in die Arbeit mit Datenbanken in Rust



Rust gewinnt rasant an Popularität in der Systemprogrammierung, aber seine Fähigkeiten gehen weit über Low-Level-Aufgaben hinaus. Dank des strengen Typsystems, der Speichersicherheit und der hohen Leistung ist Rust eine ausgezeichnete Wahl für die Erstellung zuverlässiger Serveranwendungen, die mit Datenbanken arbeiten. In diesem Artikel werden wir im Detail besprechen, wie man eine Verbindung herstellt und Operationen mit zwei beliebten DBMS durchführt: der relationalen PostgreSQL und der dokumentenorientierten MongoDB.



Wir werden die wichtigsten Bibliotheken (Crates) wie diesel für PostgreSQL und den offiziellen Treiber mongodb betrachten und Beispiele für CRUD-Operationen in reinem Rust zeigen. Der Artikel wird sowohl für Anfänger als auch für erfahrene Entwickler nützlich sein, die ihren Technologie-Stack erweitern möchten.



1. Arbeiten mit PostgreSQL: Das Diesel-Crate



Diesel ist ein sicherer, erweiterbarer ORM und Query Builder für Rust. Es gewährleistet Typprüfung zur Kompilierzeit, was viele Laufzeitfehler im Zusammenhang mit SQL-Abfragen ausschließt. Zunächst müssen die Abhängigkeiten in der Datei Cargo.toml hinzugefügt werden.



Installation und Konfiguration



Fügen Sie die folgenden Crates hinzu:



[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"] }


Installieren Sie außerdem das Kommandozeilen-Tool Diesel CLI:



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


Erstellen Sie eine Datei .env im Stammverzeichnis des Projekts mit der URL Ihrer Datenbank:



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


Führen Sie den Befehl zum Einrichten der Migrationen aus:



diesel setupdiesel migration generate create_users


Definition des Schemas und der Modelle



Schreiben Sie in der Migrationsdatei up.sql das SQL zum Erstellen der Tabelle:



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


Führen Sie dann diesel migration run aus. Generieren Sie anschließend das Rust-Schema (Datei src/schema.rs) mit:



diesel print-schema > src/schema.rs


Nun definieren wir das Modell und die Struktur zum Einfügen von Daten:



// 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,}


CRUD-Operationen mit PostgreSQL



Betrachten wir die grundlegenden Operationen. Verbindung zur Datenbank und Erstellen eines neuen Benutzers:



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

Buchempfehlungen