Tukaj je vodnik, ki vam bo pomagal začeti uporabljati baze podatkov SQL v Rust.

Ko gradite več programov Rust, boste morda morali komunicirati z bazami podatkov za shranjevanje in iskanje podatkov.

Močno tipkanje, varnost pomnilnika in zmogljivost Rusta v kombinaciji s podporo za asinhrone operacije, ORM in migracije, omogočajo učinkovito in razširljivo obdelavo podatkov, zaradi česar je Rust odlična izbira za gradnjo baze podatkov aplikacije.

Uvod v uporabo baz podatkov SQL v Rust

V ekosistemu Rust je veliko zabojev in knjižnic baz podatkov, ki zagotavljajo podporo za različne paradigme baz podatkov.

Za baze podatkov SQL lahko izbirate med gonilniki baz podatkov, kot je Libpq, Mysql-konektor, in Sqlite3 ki zagotavljajo vmesnik za programe Rust za neposredno interakcijo z bazami podatkov brez abstraktne plasti na SQL in ORM (Object-Relational Mappers), kot je Dizelsko gorivo, Sqlx, in Rust-postgres ki zagotavljajo priročen način za delo z bazo podatkov Vrste podatkov Rust kot so strukture in funkcije.

instagram viewer

Diesel ORM je eden najbolj priljubljenih paketov podatkovnih baz v ekosistemu Rust. Kot ORM Diesel ponuja funkcije od sestavljanja in izvajanja poizvedb do definicije modela in selitev sheme baze podatkov, kar vam olajša interakcijo z bazami podatkov in pisati učinkovito, čisto kodo, ki jo je enostavno vzdrževati.

Diesel tudi podpira več mehanizmov baze podatkov, vključno s PostgreSQL, MySQL in SQLite, in zagotavlja robusten nabor funkcij za ravnanje s kompleksnimi operacijami baze podatkov, kot so transakcije, združevanja in združevalne funkcije.

Z zmogljivimi orodji, funkcijami in odlično dokumentacijo je Diesel postal prava izbira za številne razvijalce Rust, ki želijo zgraditi robustne in razširljive aplikacije, ki temeljijo na podatkih.

Začetek uporabe dizla

Dodati boste morali dizel in dotenv zaboje v odvisnosti vašega projekta v razdelku odvisnosti vašega tovor.toml mapa.

[odvisnosti]
dizel = { različica = "1.4.4", funkcije = ["sqlite"] }
dotenv = "0.15.0"

Ko dodate zaboje kot odvisnosti, morate namestiti diesel_cli Orodje CLI za interakcijo z Diesel.

Zaženite ta ukaz, da namestite diesel_cli orodje:

namestitev tovora diesel_cli

Orodje CLI lahko pokličete z dizel ukaz po namestitvi orodja.

Nato ustvarite datoteko s spremenljivkami okolja in podajte URL svoje baze podatkov.

Zaženite ta ukaz, da ustvarite in vstavite URL baze podatkov za bazo podatkov SQLite v pomnilniku.

echo DATABASE_URL=database.db > .env

Za delo z Diesel morate v računalnik namestiti sqlite3 ali želeno bazo podatkov.

Končno zaženite nastaviti ukaz za Diesel, da nastavi bazo podatkov za vaš projekt:

dizelska nastavitev

The nastaviti ukaz ustvari a migracije ustvari bazo podatkov, določeno v DATABASE_URLin izvaja obstoječe selitve.

Nastavitev migracij z dizelskim gorivom

Ko nastavite bazo podatkov z Diesel, boste uporabili ustvarjajo migracije ukaz za ustvarjanje selitvenih datotek. Kot argument boste dodali ime datoteke:

dizelska migracija ustvari create_humans

Ukaz ustvari dve datoteki SQL v migracije imenik: up.sql in navzdol.sql.

SQL boste napisali za definicije tabel baze podatkov v up.sql mapa:

-- Vaš SQL gre tukaj

USTVARJANJETABELA"človek"
(
"id" INTEGER NOT NULL SAMOPOVEČANJE PRIMARNEGA KLJUČA,
"first_name" TEXT NOT NULL,
"last_name" TEXT NOT NULL,
"starost" INTEGER NI NULL
);

Napisali boste kodo SQL za spuščanje tabel baze podatkov v navzdol.sql mapa:

-- navzdol.sql

-- Ta datoteka bi morala razveljaviti vse v `up.sql`
DROPTABELA"človek"

Ko napišete datoteke SQL, zaženite selitveni tek ukaz za uporabo čakajočih selitev.

prehod na dizelsko gorivo

Poleg tega lahko uporabite ponovitev selitve ukaz za povrnitev selitev:

ponovitev prehoda na dizelsko gorivo

Prav tako lahko uporabite print-shema ukaz za tiskanje sheme. Ukaz natisne vsebino shema.rs mapa.

shema dizelskega tiska

Izhod iz print_shema ukaz je koda Rust, ki se ujema z vašo shemo SQL:

Povezovanje z vašo bazo podatkov SQL z Diesel

Najprej v datoteko dodajte te uvoze in direktive:

mod shema;

#[makro_uporaba]
eksternzaboj dizelsko gorivo;
uporaba dotenv:: dotenv;
uporaba diesel:: prelude::*;
uporaba std:: env;
uporaba Diesel::{Connection, ExpressionMethods, QueryDsl, RunQueryDsl, SqliteConnection};
uporaba zaboj:: shema:: človek;

Uvoze in direktive boste uporabili za povezavo z vašo bazo podatkov in izvajanje operacij.

Tukaj je opisano, kako se lahko povežete z bazo podatkov SQLite s funkcijo in vrnete primerek povezave:

uporaba std:: env;
uporaba diesel::{Povezava, SqliteConnection};

fnvzpostavi_povezavo() -> SqliteConnection {
dotenv().ok();

pustiti database_url = env:: var("DATABASE_URL")
.pričakovati("DATABASE_URL mora biti nastavljen");
SqliteConnection:: establish(&database_url)
.unwrap_or_else(|_| panika!("Napaka pri povezovanju z {}", baza podatkov_url))
}

The vzpostavi_povezavo funkcija vrne strukturo primerka povezave (SqliteConnection). The vzpostavi_povezavo naloži spremenljivke okolja z v redu dostopa do URL-ja baze podatkov z var funkcijo in vzpostavi povezavo z bazo podatkov preko URL-ja z vzpostaviti funkcijo.

Po uspešni povezavi lahko izvedete poizvedbe in jih vstavite v bazo podatkov.

Vstavljanje vrednosti v bazo podatkov z Diesel

Za vstavljanje vrednosti v bazo podatkov boste uporabili strukturo, ki se ujema z vašo shemo SQL.

Tukaj je struktura, ki se ujema z človek shema tabele:

#[izpelji (vprašljivo)]
pubstructČlovek {
pub id: i32,
pub ime: Vrvica,
pub priimek: Vrvica,
pub starost: i32,
}

Funkcija vstavljanja bo vrnila primerek Človek vrsto za druge operacije.

Potrebovali boste strukturo za svojo funkcijo vstavljanja; struktura bo implementirala dva atributa makra, enega za funkcijo vstavljanja in drugega, ki identificira tabelo za operacijo.

Tukaj je struktura za operacijo vstavljanja:

#[izpelji (vstaviti)]
#[ime_tabele = "človek"]
structNewHuman<'a> {
ime: &'astr,
priimek: &'astr,
starost: i32,
}

Vaša funkcija vstavljanja bo prevzela primerek povezave in podatke, ki jih želite vstaviti v bazo podatkov. Vnesite podatke in natisnite sporočilo glede na stanje operacije.

fnvstavi_v<'a>(conn: &SqliteConnection, first_name: &'astr, priimek: &'astr, starost: i32) -> Človek {
uporaba zaboj:: shema:: človek;

pustiti new_human = NewHuman {
ime,
priimek,
starost,
};

diesel:: insert_into (human:: table).values(&new_human).execute (conn).expect("Napaka pri vstavljanju novega človeka");

human:: table.order (human:: id.desc()).first (conn).unwrap()
}

The vstavi_v funkcija prevzame parametre in vstavi vrednosti v zbirko podatkov z Dieselovim vstavi_v funkcijo, ki zajema tabelo in vrednote funkcija, ki sprejme primerek struct. Funkcija dodeli ID v padajočem vrstnem redu z desc funkcijo, preden izvedete operacijo.

Tukaj je glavni funkcija, ki pokliče vstavi_v funkcija:

fnglavni() {
pustiti conn = vzpostavi_povezavo();
pustiti nov_človek = vstavi_v(&conn, "Janez", "srna", 25);
println!("Vstavljen nov človek z ID-jem: {}", new_human.id);

}

The povezava spremenljivka je primerek povezave, in novo_človeško spremenljivka je klic funkcije. The glavni funkcija natisne ID po uspešni operaciji.

Poizvedovanje po podatkovnih bazah z Diesel

Druga možnost je, da bo vaša funkcija poizvedbe struct implementirala Poizvedljivo atribut z a izpeljati makro.

Tukaj je struktura za operacijo poizvedbe:

// Definirajte strukturo, ki predstavlja vrstico v vaši tabeli
#[izpelji (vprašljivo)]
structČlovek {
id: i32,
ime: Vrvica,
priimek: Vrvica,
starost: i32,
}

Funkcija poizvedbe bo prevzela primerek povezave in vrnila a Človek strukturirati takole:

fnquery_db(conn: &SqliteConnection) -> Human {
human.filter (age.eq(25)).first (conn).expect("Napaka pri poizvedovanju po bazi podatkov")
}

The query_db funkcija filtrira človeško tabelo za vrstico, kjer je starost je enako 25 in vrne prvo pojavitev kot primerek strukture.

fnglavni() {

pustiti conn = vzpostavi_povezavo();
pustiti oseba = query_db(&conn);

println!("ID: {}", person.id);
println!("Ime: {}", oseba.ime_);
println!("Priimek: {}", oseba.priimek);
println!("Starost: {}", oseba.starost);
}

V glavni funkcija, oseba spremenljivka pokliče query_db funkcijo in natisne polja vrstice z vrednostjo starosti, ki je enaka 25.

Z Rustom lahko sestavite spletne strežnike

Rust še naprej pridobiva na priljubljenosti v spletnem razvoju kot jezik na strani strežnika s knjižnicami, kot je Actix-web in Raketa ki olajšajo nastavitev strežnikov ter gradnjo API-jev in spletnih mest z abstrahiranjem kompleksne funkcionalnosti.

Večina spletnih strežnikov mora komunicirati z bazami podatkov za shranjevanje in iskanje podatkov. Vaše aplikacije, ki jih poganja Diesel, lahko dodatno integrirate z Actix-web ali Rocket, da ustvarite sofisticirane spletne aplikacije.