Derleme Zamanında Denetlenen Sorgular
Tür güvenli SQL
Derleme Zamanında Denetlenen Sorgular, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.
En güçlü özellik
sqlx, SQL'inizi gerçek bir veritabanı şemasına karşı derleme zamanında doğrulayabilir. Yazım hataları, yanlış sütun adları ve tür uyuşmazlıkları derleme hatasına dönüşür.
query!makro ailesini kullanır- Hataları çalışma zamanından önce yakalar
query! ile query karşılaştırması
query() işlevi çalışma zamanında denetlenir. query! makrosu, derleme sırasında veritabanına bağlanarak derleme zamanında denetlenir.
use sqlx::{Pool, Postgres};
async fn run(pool: &Pool<Postgres>) {
let rec = sqlx::query!("SELECT id, name FROM users WHERE id = $1", 1i32)
.fetch_one(pool)
.await
.unwrap();
}Türü belirlenmiş sonuç alanları
query! makrosu, seçilen sütunlarla eşleşen alanlara sahip anonim bir yapı oluşturur ve doğru Rust türlerini şemadan çıkarır.
use sqlx::{Pool, Postgres};
async fn name_of(pool: &Pool<Postgres>, id: i32) -> String {
let rec = sqlx::query!("SELECT name FROM users WHERE id = $1", id)
.fetch_one(pool)
.await
.unwrap();
rec.name
}Denetim nasıl çalışır?
Derleme zamanında sqlx'in ya canlı bir DATABASE_URL'ye ya da önbelleğe alınmış bir .sqlx dizinine ihtiyacı vardır. Parametre ve sonuç türlerini öğrenmek için sorguyu veritabanına gönderir.
cargo sqlx prepare ile çevrimdışı kip
Veritabanı olmayan sürekli tümleştirme ortamları için sorgu üst verilerini .sqlx/ içine kaydetmek üzere cargo sqlx prepare çalıştırın. Derlemeler daha sonra önbelleği kullanır.
cargo sqlx preparequery_as! ile yapınıza eşleme
Satırları doğrudan tanımladığınız bir yapıya eşlemek için query_as! kullanın; sorgu yine tamamen denetlenir.
use sqlx::{Pool, Postgres};
struct User { id: i32, name: String }
async fn get(pool: &Pool<Postgres>) -> User {
sqlx::query_as!(User, "SELECT id, name FROM users WHERE id = $1", 1i32)
.fetch_one(pool)
.await
.unwrap()
}Boş değer alabilen sütunlar Option'a dönüşür
Bir sütun NULL olabiliyorsa sqlx alanı bir Option yapar. name as "name!" gibi tür ek açıklamalarıyla çıkarımı geçersiz kılabilirsiniz.
use sqlx::{Pool, Postgres};
async fn maybe_email(pool: &Pool<Postgres>) -> Option<String> {
let rec = sqlx::query!("SELECT email FROM users WHERE id = $1", 1i32)
.fetch_one(pool)
.await
.unwrap();
rec.email
}Tür çıkarımını modelleme
Derleme zamanı denetimi, SQL türlerini Rust türlerine eşler. Bu çalıştırılabilir örnek, bu eşleme kararını modeller.
fn rust_type(sql: &str, nullable: bool) -> String {
let base = match sql {
"int4" => "i32",
"text" => "String",
"bool" => "bool",
_ => "unknown",
};
if nullable { format!("Option<{}>", base) } else { base.to_string() }
}
fn main() {
println!("{}", rust_type("int4", false));
println!("{}", rust_type("text", true));
}Göreceğiniz derleme hataları
Eksik bir sütuna başvurursanız sqlx, anlaşılır bir iletiyle derlemeyi başarısız kılar. Makroların temel amacı bu güvenliktir.
- Yanlış sütun adı → derleme zamanında hata
- Tür uyuşmazlığı → derleme zamanında hata
Bağlama parametreleri konumsaldır
Postgres için $1, $2 yer tutucularını kullanın. sqlx, bağlanan her bağımsız değişkenin türünü şemaya karşı denetler.
use sqlx::{Pool, Postgres};
async fn search(pool: &Pool<Postgres>, name: &str, min_age: i32) {
let _ = sqlx::query!(
"SELECT id FROM users WHERE name = $1 AND age >= $2",
name, min_age
).fetch_all(pool).await.unwrap();
}Makro olmayan biçim ne zaman kullanılmalı?
Çalışma zamanında oluşturulan dinamik SQL için (sütunları önceden bilmiyorsanız) query() / query_as() kullanın. Esneklik karşılığında derleme zamanı denetimlerinden vazgeçersiniz.
use sqlx::{Pool, Postgres};
async fn dynamic(pool: &Pool<Postgres>, sql: &str) {
let _ = sqlx::query(sql).execute(pool).await.unwrap();
}Hızlı Kontrol
Derleme zamanı denetimiyle ilgili anlayışınızı sınayın.
Özet
Derleme zamanında denetlenen sorguları öğrendiniz:
query!vequery_as!, SQL'i derleme sırasında şemaya karşı doğrular- Sonuç alanları ve türleri otomatik olarak çıkarılır
- Boş değer alabilen sütunlar
Option'a dönüşür cargo sqlx prepare, çevrimdışı derlemeleri etkinleştirir- Dinamik SQL için makro olmayan
query()kullanın
Sırada: CRUD işlemleri.
Sıkça Sorulan Sorular
“Derleme Zamanında Denetlenen Sorgular” dersi ücretsiz mi?
Evet — “Derleme Zamanında Denetlenen Sorgular” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.
“Derleme Zamanında Denetlenen Sorgular” dersinde ne öğreneceğim?
Tür güvenli SQL Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Derleme Zamanında Denetlenen Sorgular” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Veritabanına Bağlanma
- Derleme Zamanında Denetlenen Sorgular
- CRUD İşlemleri
- Geçişler