- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Rust ekosisteminde veritabanı işlemleri için iki ana yol vardır: Ya Diesel gibi bir ORM (Object-Relational Mapper) kullanırsınız ya da veritabanına daha yakın olan, ham SQL yazmanıza izin veren bir kütüphane seçersiniz. SQLx, bu ikinci yolun tartışmasız lideridir.
SQLx'in en "devrimsel" özelliği, yazdığınız SQL sorgularını derleme zamanında (compile-time) veritabanınıza bağlanarak kontrol etmesidir.
Rust
3. Sorgu Çalıştırma ve
SQLx'in büyüsü
Rust
Rust
Bash
SQLx'in en "devrimsel" özelliği, yazdığınız SQL sorgularını derleme zamanında (compile-time) veritabanınıza bağlanarak kontrol etmesidir.
1. Neden SQLx? (Compile-time Safety)
Diğer dillerde bir SQL sorgusunda hata yaparsanız (örneğin bir tablo adını yanlış yazarsanız), bu hatayı ancak programı çalıştırıp o kod satırı tetiklendiğinde anlarsınız. SQLx'te ise:- Sorgunuzdaki yazım hataları,
- Yanlış sütun isimleri,
- Tip uyuşmazlıkları (veritabanında
Integerolan bir alanı Rust'taStringile karşılamak gibi),
2. Temel Kurulum ve Bağlantı Havuzu
SQLx tamamen asenkrondur ve Tokio veya async-std ile mükemmel çalışır.PgPool (PostgreSQL için) gibi yapılarla bağlantı havuzunu yönetir.Rust
Kod:
use sqlx::postgres::PgPoolOptions;
#[tokio::main]
async fn main() -> Result<(), sqlx::Error> {
// Veritabanı bağlantı havuzu oluşturma
let pool = PgPoolOptions::new()
.max_connections(5)
.connect("postgres://kullanici:sifre@localhost/veritabani")
.await?;
Ok(())
}
3. Sorgu Çalıştırma ve query! Makrosu
SQLx'in büyüsü query! ve query_as! makrolarında yatar. Bu makrolar, .env dosyanızdaki DATABASE_URL üzerinden canlı veritabanına bağlanır ve sorguyu doğrular.Rust
Kod:
// Basit bir sorgu: Sonuçları anonim bir struct olarak döner
let kullanici = sqlx::query!("SELECT id, ad FROM kullanicilar WHERE id = $1", 1)
.fetch_one(&pool)
.await?;
println!("ID: {}, Ad: {}", kullanici.id, kullanici.ad);
Struct'lara Eşleme (Mapping)
Veriyi doğrudan kendi tanımladığınız bir struct'a doldurmak içinFromRow trait'ini kullanırsınız:Rust
Kod:
#[derive(sqlx::FromRow)]
struct Kullanici {
id: i32,
ad: String,
}
let liste = sqlx::query_as!(Kullanici, "SELECT id, ad FROM kullanicilar")
.fetch_all(&pool)
.await?;
4. Migrations (Veritabanı Göçleri)
SQLx, veritabanı şemanızı kod tabanınızla birlikte yönetmeniz için yerleşik bir migration desteği sunar.sqlx-cli aracılığıyla yeni tablolar oluşturabilir ve bunları versiyonlayabilirsiniz.Bash
Kod:
sqlx migrate add tablo_olustur
# Bu komut 'migrations/' klasöründe bir .sql dosyası oluşturur
5. SQLx mi, Diesel mi?
| Özellik | SQLx | Diesel |
| SQL Yazımı | Ham SQL (Kontrol edilmiş) | Rust DSL (Domain Specific Language) |
| Asenkron | Yerleşik destek (Async-native) | Üçüncü taraf paketlerle asenkron |
| Derleme Hızı | Sorgu kontrolü nedeniyle biraz yavaşlayabilir | Genellikle daha hızlı |
| Öğrenme Eğrisi | SQL biliyorsanız çok kolay | Rust'ın tip sistemine çok hakimiyet ister |