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

instagram viewer
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.