Evo vodiča koji će vam pomoći da počnete koristiti SQL baze podataka u Rustu.
Kako gradite više Rust programa, možda ćete trebati komunicirati s bazama podataka za pohranjivanje i dohvaćanje podataka.
Rustovo snažno tipkanje, sigurnost memorije i izvedba, u kombinaciji s podrškom za asinkrone operacije, ORM-ove i migracije, omogućuju učinkovitu i skalabilnu obradu podataka, čineći Rust izvrsnim izborom za izgradnju baze podataka aplikacije.
Uvod u korištenje SQL baza podataka u Rustu
U Rust ekosustavu postoji mnogo sanduka i biblioteka baza podataka koje pružaju podršku za različite paradigme baza podataka.
Za SQL baze podataka možete birati između upravljačkih programa baze podataka poput Libpq, Mysql-konektor, i Sqlite3 koji pružaju sučelje za Rust programe za izravnu interakciju s bazama podataka bez ikakvog sloja apstrakcije na SQL-u i ORM-ovima (Object-Relational Mappers) poput Dizel, Sqlx, i Rust-postgres koji pružaju prikladan način rada s bazom podataka Rust tipovi podataka kao što su strukture i funkcije.
Diesel ORM je jedan od najpopularnijih paketa baze podataka u Rust ekosustavu. Kao ORM, Diesel pruža značajke od izgradnje i izvršavanja upita do definicije modela i migracije sheme baze podataka, što vam olakšava interakciju s bazama podataka i pisati učinkovit, čist kod koji se lako održava.
Diesel također podržava više motora baza podataka uključujući PostgreSQL, MySQL i SQLite, i pruža robustan skup značajki za rukovanje složenim operacijama baze podataka kao što su transakcije, spajanja i agregatne funkcije.
S moćnim alatima, značajkama i izvrsnom dokumentacijom, Diesel je postao glavni izbor za mnoge Rust programere koji žele izgraditi robusne i skalabilne aplikacije temeljene na podacima.
Početak rada s dizelom
Morat ćete dodati dizel i dotenv sanduke u ovisnosti vašeg projekta u odjeljku ovisnosti vašeg teret.toml datoteka.
[ovisnosti]
dizel = { verzija = "1.4.4", karakteristike = ["sqlite"] }
dotenv = "0.15.0"
Nakon dodavanja sanduka kao ovisnosti, morate instalirati diesel_cli CLI alat za interakciju s Dieselom.
Pokrenite ovu naredbu da biste instalirali diesel_cli alat:
teretna instalacija diesel_cli
CLI alat možete pozvati pomoću dizel naredbu nakon instaliranja alata.
Zatim stvorite datoteku varijabli okruženja i navedite URL svoje baze podataka.
Pokrenite ovu naredbu za stvaranje i umetanje URL-a baze podataka za SQLite bazu podataka u memoriji.
echo DATABASE_URL=database.db > .env
Za rad s Dieselom morate instalirati sqlite3 ili željenu bazu podataka na svoje računalo.
Na kraju, pokrenite postaviti naredba za Diesel da postavi bazu podataka za vaš projekt:
dizelska postavka
The postaviti naredba stvara a migracije imenik, stvara bazu podataka navedenu u DATABASE_URL, i pokreće postojeće migracije.
Postavljanje migracija s dizelom
Nakon što postavite svoju bazu podataka s Dieselom, koristit ćete migracija generirati naredba za generiranje datoteka za migraciju. Dodat ćete naziv datoteke kao argument:
diesel migracija generiraj create_humans
Naredba generira dvije SQL datoteke u migracije imenik: up.sql i dolje.sql.
Napisat ćete SQL za definicije tablice baze podataka u up.sql datoteka:
-- Vaš SQL ide ovdje
STVORITISTOL"ljudski"
(
"id" INTEGER NOT NULL AUTOINKREMENT PRIMARNOG KLJUČA,
"first_name" TEXT NOT NULL,
"prezime" TEXT NOT NULL,
"dob" INTEGER NIJE NULL
);
Napisat ćete SQL kod za ispuštanje tablica baze podataka u dolje.sql datoteka:
-- dolje.sql
-- Ova datoteka bi trebala poništiti sve u `up.sql`
PADSTOL"ljudski"
Nakon pisanja SQL datoteka, pokrenite migracija run naredba za primjenu migracija na čekanju.
diesel migration run
Osim toga, možete koristiti migracija ponoviti naredba za vraćanje migracija:
diesel migration redo
Također, možete koristiti print-shema naredba za ispis sheme. Naredba ispisuje sadržaj shema.rs datoteka.
diesel print-shema
Izlaz od shema_ispisa naredba je Rust kod koji odgovara vašoj SQL shemi:
Povezivanje s vašom SQL bazom podataka pomoću Diesela
Prvo dodajte ove uvoze i direktive u svoju datoteku:
mod shema;
#[macro_use]
vanjskisanduk dizel;
koristiti dotenv:: dotenv;
koristiti dizel:: prelude::*;
koristiti std:: env;
koristiti Diesel::{Connection, ExpressionMethods, QueryDsl, RunQueryDsl, SqliteConnection};
koristiti sanduk:: shema:: čovjek;
Koristit ćete uvoze i direktive za povezivanje s bazom podataka i izvođenje operacija.
Evo kako se možete spojiti na SQLite bazu podataka pomoću funkcije i vratiti instancu veze:
koristiti std:: env;
koristiti diesel::{Connection, SqliteConnection};fnuspostaviti_vezu() -> SqliteConnection {
dotenv().ok();
neka baza_url = env:: var("DATABASE_URL")
.očekivati("DATABASE_URL mora biti postavljen");
SqliteConnection:: establish(&database_url)
.unwrap_or_else(|_| panika!("Pogreška pri povezivanju s {}", baza podataka_url))
}
The uspostaviti_vezu funkcija vraća strukturu instance veze (SqliteConnection). The uspostaviti_vezu učitava varijable okruženja s u redu funkcija, pristupa URL-u baze podataka s var funkciju i uspostavlja vezu s bazom podataka putem URL-a s uspostaviti funkcija.
Nakon uspješne veze, možete izvršiti upite i umetnuti ih u svoju bazu podataka.
Umetanje vrijednosti u bazu podataka s Dieselom
Upotrijebit ćete strukturu koja odgovara vašoj SQL shemi za umetanje vrijednosti u vašu bazu podataka.
Evo strukture koja odgovara ljudski shema tablice:
#[derive (upitno)]
pubstrukturiratiljudski {
pub iskaznica: i32,
pub ime: Niz,
pub prezime: Niz,
pub dob: i32,
}
Funkcija umetanja vratit će instancu ljudski vrsta za druge operacije.
Trebat će vam struktura za vašu funkciju umetanja; struktura će implementirati dva makro atributa, jedan za funkciju umetanja i drugi koji identificira tablicu za operaciju.
Evo strukture za operaciju umetanja:
#[derive (Insertable)]
#[naziv_tablice = "ljudski"]
strukturiratiNewHuman<'a> {
ime: &'astr,
prezime: &'astr,
dob: i32,
}
Vaša funkcija umetanja će uzeti instancu veze i podatke koje želite umetnuti u bazu podataka. Unesite podatke i ispišite poruku na temelju statusa operacije.
fnumetnuti u<'a>(conn: &SqliteConnection, first_name: &'astr, prezime: &'astr, dob: i32) -> Ljudsko {
koristiti sanduk:: shema:: čovjek;neka new_human = NewHuman {
ime,
prezime,
dob,
};diesel:: insert_into (human:: table).values(&new_human).execute (conn).expect("Pogreška pri umetanju novog čovjeka");
human:: table.order (human:: id.desc()).prvi (conn).unwrap()
}
The umetnuti u funkcija preuzima parametre i umeće vrijednosti u bazu podataka s Dieselovim umetnuti u funkcija koja preuzima tablicu i vrijednosti funkcija koja uzima instancu struct. Funkcija dodjeljuje ID silaznim redoslijedom s desc funkciju prije izvođenja operacije.
Evo glavni funkcija koja poziva umetnuti u funkcija:
fnglavni() {
neka conn = uspostavi_vezu();
neka new_human = insert_into(&conn, "Ivan", "srna", 25);
println!("Umetnut je novi čovjek s ID-om: {}", new_human.id);
}
The veza varijabla je instanca veze, a novi_ljudski varijabla je poziv funkcije. The glavni ispisuje ID nakon uspješne operacije.
Upiti u baze podataka s Dieselom
Alternativno, vaša struktura upita će implementirati Upitno atribut s a izvesti makro.
Evo strukture za operaciju upita:
// Definirajte strukturu koja predstavlja red u vašoj tablici
#[derive (upitno)]
strukturiratiljudski {
iskaznica: i32,
ime: Niz,
prezime: Niz,
dob: i32,
}
Funkcija upita će uzeti instancu veze i vratiti a ljudski strukturirati na sljedeći način:
fnquery_db(conn: &SqliteConnection) -> Human {
human.filter (age.eq(25)).prvi (conn).očekivati("Pogreška pri upitu baze podataka")
}
The query_db funkcija filtrira ljudsku tablicu za redak u kojem je dob jednako je 25 i vraća prvo pojavljivanje kao instancu strukture.
fnglavni() {
neka conn = uspostavi_vezu();
neka osoba = query_db(&conn);
println!("ISKAZNICA: {}", person.id);
println!("Ime: {}", osoba.ime_);
println!("Prezime: {}", osoba.prezime);
println!("Dob: {}", osoba.dob);
}
u glavni funkcija, osoba varijabla poziva query_db funkciju i ispisuje polja retka s vrijednošću starosti jednakom 25.
Možete izgraditi web poslužitelje s Rustom
Rust nastavlja dobivati popularnost u web razvoju kao jezik na strani poslužitelja s bibliotekama poput Actix-web i Raketa koji olakšavaju postavljanje poslužitelja i izradu API-ja i web stranica apstrahiranjem složene funkcionalnosti.
Većina web poslužitelja mora komunicirati s bazama podataka radi pohrane i dohvaćanja podataka. Možete dodatno integrirati svoje Diesel aplikacije s Actix-webom ili Rocketom za izradu sofisticiranih web aplikacija.