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.

instagram viewer

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.