Function get

Source
pub async fn get<T: SqlQuery + FromRow + SqlParams>(
    pool: &Pool,
    params: &T,
) -> Result<T, Error>
Expand description

§get

Deadpool bağlantı havuzunu kullanarak veritabanından bir kaydı alır.

§Parametreler

  • pool: Deadpool bağlantı havuzu
  • params: Sorgu parametrelerini içeren veri nesnesi (SqlQuery, FromRow ve SqlParams trait’lerini uygulamalıdır)

§Dönüş Değeri

  • Result<T, Error>: Başarılı olursa, alınan kaydı döndürür; başarısız olursa, Error döndürür

§Yapı Tanımı

Bu fonksiyonla kullanılan yapılar aşağıdaki derive makrolarıyla işaretlenmelidir:

#[derive(Queryable, SqlParams, FromRow)]   // Gerekli makrolar
#[table("tablo_adi")]                     // Sorgulanacak tablo adı
#[where_clause("id = $")]                  // Sorgu koşulu
pub struct VeriModeli {
    pub id: i32,                          // Koşulda kullanılan alanlar
    pub alan1: String,                    // Getirilen veri alanları
    pub alan2: i32,                       // Getirilen veri alanları
    // ...
}
  • Queryable: Otomatik olarak SQL SELECT ifadeleri oluşturur
  • SqlParams: Otomatik olarak SQL parametreleri oluşturur
  • FromRow: Veritabanı satırını yapıya dönüştürür
  • #[table("tablo_adi")]: Sorgulanacak tablo adını belirtir
  • #[where_clause("id = $")]: Sorgu koşulunu belirtir ($ parametre değeri ile değiştirilir)

§Kullanım Örneği

use deadpool_postgres::{Config, Runtime, Pool};
use tokio_postgres::{NoTls, Error};
use parsql::tokio_postgres::pool_crud_ops::get;
 
#[derive(Queryable, SqlParams, FromRow)]
#[table("users")]
#[where_clause("id = $")]
pub struct GetUser {
    pub id: i32,
    pub name: String,
    pub email: String,
    pub state: i16,
}

impl GetUser {
    pub fn new(id: i32) -> Self {
        Self {
            id,
            name: String::new(),
            email: String::new(),
            state: 0,
        }
    }
}
 
#[tokio::main]
async fn main() -> Result<(), Error> {
    let mut cfg = Config::new();
    cfg.host = Some("localhost".to_string());
    cfg.dbname = Some("test".to_string());
     
    let pool = cfg.create_pool(Some(Runtime::Tokio1), NoTls).unwrap();

    let user_params = GetUser::new(1);
    let user = get(&pool, &user_params).await?;
     
    println!("User: {:?}", user);
    Ok(())
}