İşte Rust'ta SQL veritabanlarını kullanmaya başlamanıza yardımcı olacak bir kılavuz.

Daha fazla Rust programı oluşturdukça, veri depolama ve alma için veritabanlarıyla etkileşime geçmeniz gerekebilir.

Rust'ın güçlü yazma, bellek güvenliği ve performansı, eşzamansız işlemler, ORM'ler ve geçişler, verimli ve ölçeklenebilir veri işlemeyi etkinleştirerek Rust'u veritabanı oluşturmak için mükemmel bir seçim haline getirir uygulamalar.

Rust'ta SQL Veritabanlarını Kullanmaya Giriş

Rust ekosisteminde, çeşitli veritabanı paradigmalarını destekleyen birçok veritabanı kasası ve kitaplığı vardır.

SQL veritabanları için, aşağıdakiler gibi veritabanı sürücüleri arasından seçim yapabilirsiniz: libpq, Mysql bağlayıcı, Ve Sqlite3 SQL ve ORM'ler (Nesne-İlişkisel Eşleyiciler) üzerinde herhangi bir soyutlama katmanı olmadan doğrudan veritabanlarıyla etkileşime girmesi için Rust programlarına bir arabirim sağlar. Dizel, Sqlx, Ve Rust-postgres üzerinden veritabanıyla çalışmak için uygun bir yol sağlayan Pas veri türleri yapılar ve işlevler gibi.

instagram viewer

Diesel ORM, Rust ekosistemindeki en popüler veritabanı paketlerinden biridir. Bir ORM olarak Diesel, sorgu oluşturma ve yürütmeden model tanımına ve veritabanı şeması geçişlerine kadar özellikler sağlayarak veritabanlarıyla etkileşiminizi kolaylaştırır ve verimli, temiz ve bakımı kolay kodlar yazın.

Dizel de destekliyor PostgreSQL, MySQL ve SQLite dahil çoklu veritabanı motorlarıve işlemler, birleştirmeler ve toplama işlevleri gibi karmaşık veritabanı işlemlerini gerçekleştirmek için sağlam bir dizi özellik sağlar.

Güçlü araçları, özellikleri ve mükemmel belgeleriyle Diesel, sağlam ve ölçeklenebilir veri odaklı uygulamalar oluşturmak isteyen birçok Rust geliştiricisi için tercih edilen bir seçenek haline geldi.

Diesel'e Başlarken

eklemek zorunda kalacaksın dizel Ve dotenv uygulamanızın bağımlılıklar bölümünde projenizin bağımlılıklarına ilişkin kasalar kargo.toml dosya.

[bağımlılıklar]
dizel = { sürüm = "1.4.4", özellikler = ["sqlite"] }
dotenv = "0.15.0"

Kasaları bağımlılık olarak ekledikten sonra, dizel_cli Diesel ile etkileşime geçmek için CLI aracı.

yüklemek için bu komutu çalıştırın. dizel_cli alet:

kargo yüklemesi dizel_cli

CLI aracını şu şekilde arayabilirsiniz: dizel aracı yükledikten sonra komut.

Ardından, bir ortam değişkenleri dosyası oluşturun ve veritabanı URL'nizi belirtin.

Bellek içi bir SQLite veritabanı için veritabanı URL'si oluşturmak ve eklemek için bu komutu çalıştırın.

yankı DATABASE_URL=veritabanı.db > .env

Diesel ile çalışmak için bilgisayarınıza sqlite3 veya tercih ettiğiniz veritabanını kurmalısınız.

Son olarak, çalıştırın kurmak projeniz için bir veri tabanı oluşturması için Diesel'e komut verin:

dizel kurulum

bu kurmak komut oluşturur göçler dizinde belirtilen veritabanını oluşturur. DATABASE_URL, ve mevcut geçişleri çalıştırır.

Migrations'ı Dizel İle Ayarlama

Veritabanınızı Diesel ile kurduktan sonra, geçiş oluşturmak geçiş dosyaları oluşturmak için komut. Dosyanın adını bağımsız değişken olarak ekleyeceksiniz:

dizel geçiş, create_humans oluşturur

Komut, iki SQL dosyası oluşturur. göçler dizin: up.sql Ve aşağı.sql.

Veritabanı tablo tanımlarınız için SQL yazacaksınız. up.sql dosya:

-- SQL'iniz buraya gelir

YARATMAKMASA"insan"
(
"id" TAM SAYI NULL DEĞİL BİRİNCİL ANAHTAR OTOMATİK ARTIRMA,
"ad_ad" METİN BOŞ DEĞİL,
"soyadı" METİN BOŞ DEĞİL,
"yaş" INTEGER NULL DEĞİL
);

Veritabanı tablolarını bırakmak için SQL kodu yazacaksınız. aşağı.sql dosya:

-- aşağı.sql

-- Bu dosya `up.sql` içindeki her şeyi geri almalıdır.
DÜŞÜRMEKMASA"insan"

SQL dosyalarını yazdıktan sonra çalıştırın geçiş çalıştırması bekleyen geçişleri uygulama komutu.

dizel geçiş çalışması

Ek olarak, geçiş yeniden yap geçişleri geri alma komutu:

dizel geçiş yeniden

Ayrıca, baskı şeması şemayı yazdırmak için komut. Komut, içeriğini yazdırır. şema.rs dosya.

dizel baskı şeması

çıkışı print_schema komutu, SQL şemanızla eşleşen Rust kodudur:

Diesel ile SQL Veritabanınıza Bağlanma

İlk olarak, bu içe aktarmaları ve yönergeleri dosyanıza ekleyin:

mod şema;

#[makro_kullanım]
dışsandık dizel;
kullanmak dotenv:: dotenv;
kullanmak dizel:: başlangıç::*;
kullanmak std:: ortam;
kullanmak Diesel::{Connection, ExpressionMethods, QueryDsl, RunQueryDsl, SqliteConnection};
kullanmak sandık:: şema:: insan;

Veritabanınıza bağlanmak ve işlemleri gerçekleştirmek için import ve yönergeleri kullanacaksınız.

Bir SQLite veritabanına bir işlevle şu şekilde bağlanıp bir bağlantı örneği döndürebilirsiniz:

kullanmak std:: ortam;
kullanmak dizel::{Bağlantı, SqliteConnection};

fnkurmak_bağlantı() -> SqliteConnection {
dotenv().ok();

izin vermek database_url = env:: var("VERİTABANI_URL")
.beklemek("DATABASE_URL ayarlanmalıdır");
SqliteConnection:: kurun(&database_url)
.unwrap_or_else(|_| panik!("{} ile bağlantı kurulurken hata oluştu", database_url))
}

bu kurmak_bağlantı işlev, bağlantı örneği yapısını döndürür (SqliteConnection). bu kurmak_bağlantı ile ortam değişkenlerini yükler Tamam işlevi ile veritabanı URL'sine erişir. var ile URL üzerinden veri tabanı ile bağlantı kurar. kurmak işlev.

Başarılı bir bağlantıdan sonra sorguları yürütebilir ve bunları veritabanınıza ekleyebilirsiniz.

Dizel İle Veritabanına Değer Ekleme

Veritabanınıza değerler eklemek için SQL şemanızla eşleşen bir yapı kullanacaksınız.

İşte eşleşen bir yapı insan tablo şeması:

#[türet (Sorgulanabilir)]
birahaneyapıİnsan {
birahane İD: i32,
birahane ilk adı: Sicim,
birahane soy isim: Sicim,
birahane yaş: i32,
}

Ekleme işlevi, örneğini döndürür. İnsan diğer işlemler için yazın.

Ekleme işleviniz için bir yapıya ihtiyacınız olacak; yapı, biri ekleme işlevi ve diğeri işlem için tabloyu tanımlayan iki makro özniteliği uygulayacaktır.

Ekleme işleminin yapısı şöyledir:

#[türet (Eklenebilir)]
#[tablo_adı = "insan"]
yapıYeni İnsan<'A> {
ilk adı: &'Astr,
soy isim: &'Astr,
yaş: i32,
}

Ekleme işleviniz, bir bağlantı örneğini ve veritabanına eklemek istediğiniz verileri alacaktır. Verileri girin ve işlemin durumuna göre bir mesaj yazdırın.

fntakın<'A>(bağlantı: &SqliteConnection, ad: &'Astr, soy isim: &'Astr, yaş: i32) -> İnsan {
kullanmak sandık:: şema:: insan;

izin vermek yeni_insan = Yeniİnsan {
ilk adı,
soy isim,
yaş,
};

dizel:: insert_into (insan:: tablo).değerler(&yeni_insan).execute (bağ).expect("Yeni insan ekleme hatası");

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

bu takın işlevi parametreleri alır ve değerleri Diesel'in veri tabanına ekler. takın tabloyu alan işlev ve değerler bir yapı örneğini alan işlev. İşlev, kimliği azalan sırada atar. iniş İşlemi gerçekleştirmeden önce işlev.

Burada ana çağıran fonksiyon takın işlev:

fnana() {
izin vermek bağ = connect_connection();
izin vermek new_human = insert_into(&conn, "John", "doe", 25);
yazdır!("Kimliğiyle eklenen yeni insan: {}", yeni_insan.id);

}

bu bağlantı değişken bir bağlantı örneğidir ve yeni_insan değişken işlev çağrısıdır. bu ana işlev, başarılı bir işlemden sonra kimliği yazdırır.

Dizel ile Veritabanlarını Sorgulama

Alternatif olarak, sorgu işlevi yapınız şunu uygulayacaktır: sorgulanabilir ile öznitelik türetmek makro.

İşte sorgu işlemi için yapı:

// Tablonuzdaki bir satırı temsil eden bir yapı tanımlayın
#[türet (Sorgulanabilir)]
yapıİnsan {
İD: i32,
ilk adı: Sicim,
soy isim: Sicim,
yaş: i32,
}

Sorgu işlevi bir bağlantı örneğini alır ve bir İnsan aşağıdaki gibi yapı:

fnsorgu_db(bağlantı: &SqliteConnection) -> İnsan {
insan.filter (yaş.eşit(25)).ilk (bağ).bekle("Veritabanı sorgulama hatası")
}

bu sorgu_db işlevi, satır için insan tablosunu filtreler. yaş 25'e eşittir ve ilk oluşumu bir yapı örneği olarak döndürür.

fnana() {

izin vermek bağ = connect_connection();
izin vermek kişi = query_db(&conn);

yazdır!("Kimlik: {}", kişi.id);
yazdır!("İlk adı: {}", kişi.ilk_adı);
yazdır!("Soy isim: {}", kişi.soyadı);
yazdır!("Yaş: {}", kişi.yaş);
}

İçinde ana işlev, kişi değişken çağırır sorgu_db işlevini kullanır ve satırın alanlarını 25'e eşit bir yaş değeriyle yazdırır.

Rust İle Web Sunucuları Oluşturabilirsiniz

Rust, aşağıdaki gibi kitaplıklarla sunucu taraflı bir dil olarak web geliştirmede popülerlik kazanmaya devam ediyor: actix-web Ve Roket Bu, karmaşık işlevleri soyutlayarak sunucuları kurmayı ve API'ler ve web siteleri oluşturmayı kolaylaştırır.

Çoğu web sunucusu, veri depolama ve alma için veritabanlarıyla etkileşime geçmek zorundadır. Sofistike web uygulamaları oluşturmak için Dizel destekli uygulamalarınızı Actix-web veya Rocket ile daha fazla entegre edebilirsiniz.