parsql
Deneyimsel SQL yardımcısı
Ne İşe Yarar?
Parsql, SQL sorgularınızı doğrudan Rust struct'ları üzerinden yönetmenize olanak tanıyan bir kütüphanedir. Temel amacı, veritabanı işlemlerini daha güvenli ve daha az kod ile gerçekleştirmenizi sağlamaktır. Bu kütüphane ile:
- Struct tanımları üzerinden otomatik SQL sorguları oluşturabilirsiniz
- Veritabanı parametrelerini güvenli bir şekilde yönetebilirsiniz
- Generic CRUD işlemlerini (ekleme, okuma, güncelleme, silme) kolayca yapabilirsiniz
- Dinamik SQL oluşturabilir ve karmaşık sorgular çalıştırabilirsiniz
Parsql standart bir ORM değildir. Daha çok, SQL yazımını ve kullanımını basitleştirmeye odaklanır.
Desteklenen Veritabanları
Parsql aşağıdaki veritabanı sistemlerini desteklemektedir:
- SQLite (senkron):
parsql-sqlitepaketi - PostgreSQL (senkron):
parsql-postgrespaketi - Tokio PostgreSQL (asenkron):
parsql-tokio-postgrespaketi
Küfe'nin Yüklenmesi
Uygulamanıza küfeyi yüklerken hangi veritabanı ile çalışacağınızı 'feature' olarak belirtmeniz gerekiyor. Cargo.toml dosyanıza paketi şu şekilde ekleyebilirsiniz:
SQLite için
parsql =
PostgreSQL için
parsql =
Tokio PostgreSQL için
parsql =
Deadpool PostgreSQL bağlantı havuzu için
parsql =
Temel Özellikler
Procedural Makrolar
Parsql, veritabanı işlemlerini kolaylaştırmak için çeşitli procedural makrolar sunar:
#[derive(Queryable)]- Okuma (select) işlemleri için#[derive(Insertable)]- Ekleme işlemleri için#[derive(Updateable)]- Güncelleme işlemleri için#[derive(FromRow)]- Veritabanı sonuçlarını nesnelere dönüştürmek için
Güvenlik Özellikleri
SQL Injection Koruması
Parsql, SQL injection saldırılarına karşı güvenli bir şekilde tasarlanmıştır:
- Parametreli sorgular otomatik olarak kullanılır, asla direk string birleştirme yapılmaz
- Tüm kullanıcı girdileri güvenli bir şekilde parametrize edilir
- Makrolar, SQL parametrelerini doğru bir şekilde işler ve güvenli bir format sağlar
- Her veritabanı adaptörü için uygun parametre işaretleyiciler (
$1,?, vb.) otomatik olarak uygulanır - SQL yazarken elle string birleştirme gereksinimi ortadan kaldırılmıştır
// Güvenli parametre kullanımı örneği
// Parametreler güvenli bir şekilde yerleştirilir,
// SQL injection riski olmaz
let query = UserQuery ;
Öznitelikler
Sorgularınızı özelleştirmek için çeşitli öznitelikler kullanabilirsiniz:
#[table("tablo_adi")]- Tablo adını belirtmek için#[where_clause("id = $")]- WHERE koşulunu belirtmek için#[select("alan1, alan2")]- SELECT ifadesini özelleştirmek için#[update("alan1, alan2")]- UPDATE ifadesini özelleştirmek için#[join("LEFT JOIN tablo2 ON tablo1.id = tablo2.fk_id")]- JOIN ifadeleri için#[group_by("alan1")]- GROUP BY ifadesi için#[order_by("alan1 DESC")]- ORDER BY ifadesi için#[having("COUNT(*) > 5")]- HAVING ifadesi için
SQL İzleme
Geliştirme sırasında oluşturulan SQL sorgularını izlemek için:
PARSQL_TRACE=1
Basit Kullanım Örneği
// Bir kayıt almak için
// SQLite için kullanım
let get_user = new;
let user = get;
// Tokio-Postgres için kullanım
let get_user = new;
let user = get.await;
Detaylı Dökümantasyon
Her veritabanı adaptörü için daha detaylı bilgi ve örnekler, ilgili alt paketlerin README dosyalarında bulunmaktadır:
GitHub'daki örnekler klasöründe her veritabanı tipi için kapsamlı örnek projeler bulabilirsiniz.
0.3.0 Sürümündeki Değişiklikler
join,group_by,order_byvehavingöznitelikleri eklendiPARSQL_TRACEçevre değişkeni desteği eklendi- Öznitelik isimleri güncellendi (
table_name→table,update_clause→update,select_clause→select) SqlQuerytrait'i eklendi ve trait yapısı sadeleştirildi- Temel trait'ler
parsql-corecrate'inde toplandı