ORM vs Ham SQL 🪑

Herkesin bir tarafı tuttuğu ebedi tartışma: kimisi "kolaylık" der, kimisi "kontrol".

🪑 Sandalye #1: SQLAlchemy ORM

ORM kod hızıyla değil, özellik teslim hızıyla ilgilidir. Dizelerle değil, nesnelerle çalışırsınız.

Neden harika:
Unit of Work: Alchemy, nesnelerdeki değişiklikleri kendisi takip eder ve tek bir işlem paketiyle veritabanına iter.
Güvenlik: SQL enjeksiyonu mu? Unutun gitsin. Eğer .text() kullanmıyorsanız, varsayılan olarak korunuyorsunuz.
Migrasyonlar: Veritabanı şemasını modellerinizle senkronize etmek, saatlerce süren rutin işlerden tasarruf ettiren bir sihirdir.
Domain Mantığı: Tablolar arası ilişkilerin "Interstellar" konusundan daha karmaşık olduğu karmaşık E-ticaret sistemleri ve admin panelleri için idealdir.

Püf noktası:
Overhead: Nesne eşleme pahalı bir işlemdir. Büyük sorgularda (100k+ satır) Python sürecinin bellek ve CPU tüketmeye başladığını hissedersiniz.
N+1 Problemi: Performansın bir numaralı katili. Unutulan bir .joinedload() ve servisiniz küçük sorgu yağmuru altında çöker.

🪑 Sandalye #2: Ham SQL / asyncpg (Yüksek Yük için Seçim)

Performansa takıldığınızda, aracı katmanlar engel olmaya başlar.

Neden harika:
Ekstrem hız: 2.5 kat fark şaka değil. asyncpg'nin ikili protokolü, ağ kanalından maksimumu almanızı sağlar.
Tam kontrol: Veritabanı planlayıcısına gidecek SQL'i tam olarak siz yazarsınız. ORM'den gereksiz sihir yok.
Veritabanına özgü özellikler: ORM üzerinden JSONB veya Postgres'e özgü indeksleri verimli kullanmayı deneyin—bazen Sisyphos işine dönüşür.

Püf noktası:
Sizin sorumluluğunuz: Parametre kaçışını unuttunuz mu? Tebrikler, veritabanı sızdı.
Bürokrasi: Veritabanından gelen tuple'ları elle DTO/Pydantic modellerine eşlemeniz gerekir. Bu sıkıcıdır ve hatalara yol açar.
Bakım: Altı ay sonra koddaki 500 satır ham SQL'i okumak şüpheli bir zevktir.


💡 Karar: Altın standart—hibrit yaklaşım

Birini seçmek zorunda değilsiniz. Modern mimari şöyle görünür:
1. SQLAlchemy ORM—%90 görev için: CRUD, iş mantığı, migrasyonlar ve admin paneli.
2. SQLAlchemy Core—ORM nesneleri çok ağır olduğunda ama henüz ham dizeler yazmak istemediğinizde.
3. Ham SQL (asyncpg)—darboğazlar için: analitik raporlar, toplu eklemeler ve 10k+ RPS yükü olan mikroservisler.

Sandalye seçimini yükünüze göre yapın ☝️

Siz hangisiyle yazıyorsunuz?
👨‍💻 Sadece ORM, SQL'i elle yazmak için hayat çok kısa.
👨‍💻 Sadece Ham SQL, bu sihire güvenmiyorum.

#iki_sandalye