CRUD İşlemleri
Sorgulayın ve çalıştırın
CRUD İşlemleri, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 3. 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.
sqlx ile CRUD
CRUD, Oluşturma, Okuma, Güncelleme ve Silme anlamına gelir. sqlx bunları iki yürütme biçimine ayırır:
- Satır döndüren sorgular için
fetch_* - Verileri değiştiren ifadeler için
execute
Oluşturma (INSERT)
Bağlı parametrelerle bir satır ekleyin ve bunu execute aracılığıyla çalıştırın. Oluşturulan kimliği geri almak için RETURNING kullanın.
use sqlx::{Pool, Postgres};
async fn create(pool: &Pool<Postgres>, name: &str) -> i32 {
let rec = sqlx::query!(
"INSERT INTO users (name) VALUES ($1) RETURNING id",
name
).fetch_one(pool).await.unwrap();
rec.id
}Bir satırı okuma
fetch_one, tam olarak bir satır bekler ve aksi durumda hata verir. Satır bulunmayabileceğinde fetch_optional kullanın.
use sqlx::{Pool, Postgres};
async fn find(pool: &Pool<Postgres>, id: i32) -> Option<String> {
let rec = sqlx::query!("SELECT name FROM users WHERE id = $1", id)
.fetch_optional(pool)
.await
.unwrap();
rec.map(|r| r.name)
}Birden çok satırı okuma
fetch_all, eşleşen tüm satırların bir Vec'ini döndürür.
use sqlx::{Pool, Postgres};
async fn all_names(pool: &Pool<Postgres>) -> Vec<String> {
let rows = sqlx::query!("SELECT name FROM users ORDER BY id")
.fetch_all(pool)
.await
.unwrap();
rows.into_iter().map(|r| r.name).collect()
}Güncelleme
UPDATE ifadeleri, etkilenen satır sayısını taşıyan bir sonuç döndüren execute'i kullanır.
use sqlx::{Pool, Postgres};
async fn rename(pool: &Pool<Postgres>, id: i32, name: &str) -> u64 {
let res = sqlx::query!("UPDATE users SET name = $1 WHERE id = $2", name, id)
.execute(pool)
.await
.unwrap();
res.rows_affected()
}Silme
DELETE de execute'i kullanır. Bir şeyin silinip silinmediğini öğrenmek için rows_affected() değerini denetleyin.
use sqlx::{Pool, Postgres};
async fn delete(pool: &Pool<Postgres>, id: i32) -> bool {
let res = sqlx::query!("DELETE FROM users WHERE id = $1", id)
.execute(pool)
.await
.unwrap();
res.rows_affected() > 0
}CRUD'yi yalın Rust ile modelleme
Bellek içi bir harita üzerinde CRUD işlemleri yapmak, sqlx'in bir tablo üzerinde gerçekleştirdiği işlemlerin aynısını yansıtır.
use std::collections::HashMap;
fn main() {
let mut users: HashMap<i32, String> = HashMap::new();
users.insert(1, "Alice".to_string()); // create
println!("{:?}", users.get(&1)); // read
users.insert(1, "Alicia".to_string()); // update
println!("{:?}", users.get(&1));
users.remove(&1); // delete
println!("{:?}", users.get(&1));
}İşlemler
Bir işlemle birden fazla ifadeyi atomik olarak gruplayın. Ya commit işlemiyle hepsi başarılı olur ya da hiçbirisi uygulanmaz.
use sqlx::{Pool, Postgres};
async fn transfer(pool: &Pool<Postgres>) {
let mut tx = pool.begin().await.unwrap();
sqlx::query!("UPDATE acct SET bal = bal - 10 WHERE id = 1")
.execute(&mut *tx).await.unwrap();
sqlx::query!("UPDATE acct SET bal = bal + 10 WHERE id = 2")
.execute(&mut *tx).await.unwrap();
tx.commit().await.unwrap();
}Geri alma
Bir işlem koruyucusu commit çağrılmadan bırakılırsa sqlx işlemi otomatik olarak geri alır. Ayrıca rollback işlevini açıkça çağırabilirsiniz.
use sqlx::{Pool, Postgres};
async fn maybe(pool: &Pool<Postgres>, ok: bool) {
let mut tx = pool.begin().await.unwrap();
sqlx::query!("INSERT INTO log (msg) VALUES ('x')").execute(&mut *tx).await.unwrap();
if ok { tx.commit().await.unwrap(); } else { tx.rollback().await.unwrap(); }
}Büyük okumaları akış olarak işleme
Çok büyük sonuç kümeleri için fetch bir akış döndürür; böylece satırların tümünü belleğe yüklemeden işleyebilirsiniz.
use sqlx::{Pool, Postgres};
use futures::TryStreamExt;
async fn stream(pool: &Pool<Postgres>) {
let mut rows = sqlx::query!("SELECT id FROM big_table").fetch(pool);
while let Some(row) = rows.try_next().await.unwrap() {
println!("id {}", row.id);
}
}Hataları ele alma
Veritabanı çağrıları Result döndürür. Result<_, sqlx::Error> döndüren işlevlerde, açmak yerine ? ile hatayı üst seviyeye iletin.
use sqlx::{Pool, Postgres};
async fn count(pool: &Pool<Postgres>) -> Result<i64, sqlx::Error> {
let rec = sqlx::query!("SELECT COUNT(*) as n FROM users")
.fetch_one(pool)
.await?;
Ok(rec.n.unwrap_or(0))
}Hızlı Kontrol
CRUD işlemlerini anlayıp anlamadığınızı test edin.
Özet
sqlx ile CRUD işlemlerini öğrendiniz:
fetch_one,fetch_optional,fetch_allsatırları okurexecuteverileri değiştirir verows_affected()ile etkilenen satır sayısını bildirirRETURNINGoluşturulan değerleri alırbegin/commit/rollbackile yapılan işlemler atomikliği sağlar
Sırada: şemayı geliştirmek için geçişler.
Sıkça Sorulan Sorular
“CRUD İşlemleri” dersi ücretsiz mi?
Evet — “CRUD İşlemleri” 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.
“CRUD İşlemleri” dersinde ne öğreneceğim?
Sorgulayın ve çalıştırın 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 3. dersidir.
“CRUD İşlemleri” 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.