Tu je sprievodca, ktorý vám pomôže začať s používaním databáz SQL v Ruste.
Pri vytváraní ďalších programov Rust možno budete musieť spolupracovať s databázami na ukladanie a získavanie údajov.
Silné písanie, bezpečnosť pamäte a výkon od Rustu v kombinácii s podporou asynchrónnych operácií, ORM a migrácie, umožňujú efektívne a škálovateľné spracovanie údajov, vďaka čomu je Rust vynikajúcou voľbou pre budovanie databázy aplikácie.
Úvod do používania SQL databáz v Rust
V ekosystéme Rust existuje veľa databázových prepraviek a knižníc, ktoré poskytujú podporu pre rôzne databázové paradigmy.
V prípade SQL databáz si môžete vybrať medzi databázovými ovládačmi ako napr Libpq, Mysql konektor, a Sqlite3 ktoré poskytujú rozhranie pre programy Rust na priamu interakciu s databázami bez akejkoľvek abstraktnej vrstvy na SQL a ORM (Object-Relational Mappers), ako napr. Diesel, Sqlx, a Rust-postgres ktoré poskytujú pohodlný spôsob práce s databázou Typy údajov hrdze ako sú štruktúry a funkcie.
Diesel ORM je jedným z najpopulárnejších databázových balíkov v ekosystéme Rust. Ako ORM poskytuje Diesel funkcie od vytvárania a vykonávania dotazov až po definíciu modelu a migráciu schém databázy, čo vám uľahčuje interakciu s databázami a
písať efektívny, čistý a ľahko udržiavateľný kód.Diesel tiež podporuje viacero databázových strojov vrátane PostgreSQL, MySQL a SQLitea poskytuje robustnú sadu funkcií na spracovanie zložitých databázových operácií, ako sú transakcie, spojenia a súhrnné funkcie.
Vďaka výkonným nástrojom, funkciám a vynikajúcej dokumentácii sa Diesel stal preferovanou voľbou pre mnohých vývojárov Rust, ktorí chcú vytvoriť robustné a škálovateľné aplikácie založené na údajoch.
Začíname s dieselom
Budete musieť pridať diesel a dotenv prepravky do závislostí vášho projektu v sekcii závislostí vášho cargo.toml súbor.
[závislosti]
diesel = { verzia = "1.4.4", funkcie = ["sqlite"] }
dotenv = "0.15.0"
Po pridaní prepraviek ako závislostí musíte nainštalovať diesel_cli Nástroj CLI na interakciu s Diesel.
Spustite tento príkaz a nainštalujte ho diesel_cli nástroj:
nákladná inštalácia diesel_cli
Nástroj CLI môžete zavolať pomocou diesel príkaz po inštalácii nástroja.
Ďalej vytvorte súbor premenných prostredia a zadajte adresu URL databázy.
Spustite tento príkaz na vytvorenie a vloženie adresy URL databázy pre databázu SQLite v pamäti.
echo DATABASE_URL=databaza.db > .env
Ak chcete pracovať s Diesel, musíte si do počítača nainštalovať sqlite3 alebo vašu preferovanú databázu.
Nakoniec spustite nastaviť príkaz pre Diesel na nastavenie databázy pre váš projekt:
nastavenie dieselu
The nastaviť príkaz vytvorí a migrácie adresár, vytvorí databázu špecifikovanú v DATABASE_URLa spúšťa existujúce migrácie.
Nastavenie migrácií s dieselom
Po nastavení databázy pomocou Diesel budete používať migrácia generovať príkaz na vygenerovanie migračných súborov. Ako argument pridáte názov súboru:
naftová migrácia generovať create_humans
Príkaz vygeneruje dva súbory SQL v migrácie adresár: up.sql a down.sql.
Napíšete SQL pre definície databázových tabuliek v up.sql súbor:
-- Váš SQL ide sem
VYTVORIŤTABLE"ľudský"
(
"ID" INTEGER NIE JE NULL AUTOMATICKÉ ZVÝŠENIE PRIMÁRNEHO KĽÚČA,
"first_name" TEXT NOT NULL,
"priezvisko" TEXT NIE JE NULL,
"vek" INTEGER NIE JE NULL
);
Napíšete kód SQL, aby ste odstránili databázové tabuľky v down.sql súbor:
-- down.sql
-- Tento súbor by mal vrátiť späť čokoľvek v `up.sql`
POKLESTABLE"ľudský"
Po napísaní súborov SQL spustite súbor migračný beh príkaz použiť čakajúce migrácie.
naftový migračný beh
Okrem toho môžete použiť prerobiť migráciu príkaz na vrátenie migrácií:
prerobiť migráciu nafty
Môžete tiež použiť print-schema príkaz na tlač schémy. Príkaz vytlačí obsah súboru schema.rs súbor.
dieselová tlačová schéma
Výstup z print_schema príkaz je kód Rust, ktorý zodpovedá vašej schéme SQL:
Pripojenie k vašej SQL databáze pomocou Diesel
Najprv do súboru pridajte tieto importy a príkazy:
mod schéma;
#[macro_use]
externéprepravka diesel;
použitie dotenv:: dotenv;
použitie diesel:: predohra::*;
použitie std:: env;
použitie Diesel::{Connection, ExpressionMethods, QueryDsl, RunQueryDsl, SqliteConnection};
použitie prepravka:: schéma:: človek;
Importy a direktívy použijete na pripojenie k databáze a vykonávanie operácií.
Tu je návod, ako sa môžete pripojiť k databáze SQLite pomocou funkcie a vrátiť inštanciu pripojenia:
použitie std:: env;
použitie diesel::{Connection, SqliteConnection};fnvytvoriť_pripojenie() -> SqliteConnection {
dotenv().ok();
nech database_url = env:: var("DATABASE_URL")
.očakávať("Musí byť nastavená DATABASE_URL");
SqliteConnection:: create(&database_url)
.unwrap_or_else(|_| panika!("Chyba pri pripájaní k {}", database_url))
}
The vytvoriť_pripojenie funkcia vracia štruktúru inštancie pripojenia (SqliteConnection). The vytvoriť_pripojenie načíta premenné prostredia s ok pristupuje k URL databáze pomocou var a vytvorí spojenie s databázou cez URL s založiť funkciu.
Po úspešnom pripojení môžete vykonávať dotazy a vkladať ich do databázy.
Vkladanie hodnôt do databázy pomocou dieselu
Na vloženie hodnôt do databázy použijete štruktúru, ktorá sa zhoduje s vašou SQL schémou.
Tu je štruktúra, ktorá sa zhoduje s človek schéma tabuľky:
#[odvodiť (dotazovateľné)]
krčmaštrukturovaťĽudské {
krčma id: i32,
krčma krstné meno: Reťazec,
krčma priezvisko: Reťazec,
krčma Vek: i32,
}
Funkcia vloženia vráti inštanciu súboru Ľudské typ pre iné operácie.
Budete potrebovať štruktúru pre funkciu vkladania; struct bude implementovať dva atribúty makra, jeden pre funkčnosť vkladania a druhý, ktorý identifikuje tabuľku pre operáciu.
Tu je štruktúra operácie vkladania:
#[odvodiť (vložiť)]
#[názov_tabuľky = "ľudský"]
štrukturovaťNewHuman<'a> {
krstné meno: &'astr,
priezvisko: &'astr,
Vek: i32,
}
Vaša funkcia vkladania prevezme inštanciu pripojenia a údaje, ktoré chcete vložiť do databázy. Vložte údaje a vytlačte správu na základe stavu operácie.
fnvložiť do<'a>(conn: &SqliteConnection, krstné_meno: &'astr, priezvisko: &'astr, Vek: i32) -> Človek {
použitie prepravka:: schéma:: človek;nech new_human = NewHuman {
krstné meno,
priezvisko,
Vek,
};diesel:: insert_into (človek:: tabuľka).values(&new_human).execute (conn).expect("Chyba pri vkladaní nového človeka");
human:: table.order (human:: id.desc()).first (conn).unwrap()
}
The vložiť do funkcia prevezme parametre a vloží hodnoty do databázy s Diesel's vložiť do funkcia, ktorá preberá tabuľku a hodnoty funkcia, ktorá preberá inštanciu struct. Funkcia priradí ID v zostupnom poradí s desc funkciu pred vykonaním operácie.
Tu je Hlavná funkciu, ktorá volá vložiť do funkcia:
fnHlavná() {
nech conn = nadviazať_spojenie();
nech new_human = insert_into(&conn, "John", "Laň", 25);
println!("Vložený nový človek s ID: {}", new_human.id);
}
The spoj premenná je inštancia pripojenia a nový_človek premenná je volanie funkcie. The Hlavná funkcia vytlačí ID po úspešnej operácii.
Dopytovanie databáz s Diesel
Alternatívne bude vaša štruktúra dotazovacej funkcie implementovať Dopytovateľné atribút s a odvodiť makro.
Tu je štruktúra operácie dotazu:
// Definujte štruktúru, ktorá predstavuje riadok vo vašej tabuľke
#[odvodiť (dotazovateľné)]
štrukturovaťĽudské {
id: i32,
krstné meno: Reťazec,
priezvisko: Reťazec,
Vek: i32,
}
Funkcia dotazu prevezme inštanciu pripojenia a vráti a Ľudské štruktúrovať takto:
fnquery_db(conn: &SqliteConnection) -> Človek {
human.filter (vek.ekv(25)).prvé (spojenie).očakávať ("Chyba pri dotazovaní databázy")
}
The query_db funkcia filtruje ľudskú tabuľku pre riadok, kde je Vek rovná sa 25 a vráti prvý výskyt ako inštanciu štruktúry.
fnHlavná() {
nech conn = nadviazať_spojenie();
nech osoba = query_db(&conn);
println!("ID: {}", osoba.id);
println!("Krstné meno: {}", osoba.krstne_meno);
println!("Priezvisko: {}", osoba.priezvisko);
println!("Vek: {}", osoba.vek);
}
V Hlavná funkcia, osoba premenná volá query_db a vytlačí polia riadku s hodnotou veku rovnajúcou sa 25.
Môžete stavať webové servery s hrdzou
Rust si naďalej získava na popularite vo vývoji webových aplikácií ako jazyk na strane servera s knižnicami ako Actix-web a Raketa ktoré uľahčujú nastavenie serverov a vytváranie rozhraní API a webových stránok abstrahovaním komplexných funkcií.
Väčšina webových serverov musí spolupracovať s databázami na ukladanie a získavanie údajov. Svoje aplikácie poháňané dieselom môžete ďalej integrovať s Actix-web alebo Rocket a vytvárať sofistikované webové aplikácie.