Prisma ile Veritabanı İşlemlerine Hızlı Başlangıç: Kurulumdan Temel Komutlara
Modern Node.js projelerinde veritabanı katmanını yönetmek için en popüler ORM’lerden biri olan Prisma, tip güvenliği ve geliştirici deneyimiyle öne çıkar. Bu yazıda, sıfırdan bir projeye Prisma’nın nasıl entegre edileceğini, temel CLI komutlarını ve ilk migration’u nasıl oluşturacağınızı adım adım öğreneceksiniz.
1. Gereksinimler ve Hazırlık
Prisma çalıştırmadan önce bilgisayarınızda Node.js 16+ ve npm (veya yarn) yüklü olmalı. Aşağıdaki komutla versiyonunuzu kontrol edin:
node -v && npm -v
PostgreSQL, MySQL, SQLite veya MongoDB gibi desteklenen bir veritabanınızın çalışıyor olması gerekir. Eğer hızlıca denemek istiyorsanız, sqlite dosyası yeterlidir; üretimde PostgreSQL önerilir.
2. Proje Klasörü Oluşturma ve Paket Yönetimi
Terminalinizde aşağıdaki adımları izleyin:
mkdir prisma-demo && cd prisma-demonpm init -ynpm install prisma @prisma/clientnpx prisma init
Son adım, proje köküne prisma/schema.prisma dosyasını ve .env dosyasını oluşturur. Artık Prisma CLI hazır!
3. Bağlantı Dizesini Tanımlama
.env dosyasını açıp DATABASE_URL ortam değişkenini güncelleyin. Örnekler:
- SQLite:
DATABASE_URL="file:./dev.db" - PostgreSQL:
DATABASE_URL="postgresql://user:password@localhost:5432/mydb"
Tüyo: Parolalarınızda özel karakter varsa URI encode edin; aksi hâlde bağlantı hatası alırsınız.
4. İlk Şema Tanımı
prisma/schema.prisma dosyasını açın. Aşağıdaki örnek, basit bir blog modeli sunar:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
model Post {
id Int @id @default(autoincrement())
title String
published Boolean @default(true)
createdAt DateTime @default(now())
}
Değişiklikleri kaydettikten sonra şemayı veritabanına uygulamak için:
npx prisma migrate dev --name init
Bu komut, migration klasörü oluşturur, SQL çalıştırır ve Prisma Client’ı yeniden üretir.
5. Prisma Client Kullanarak CRUD İşlemleri
Artık kod içinde tip güvenli sorgular yazabiliriz. Örnek index.js:
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
// CREATE
const newPost = await prisma.post.create({
data: { title: 'Prisma 101' },
})
console.log('Yeni post:', newPost)
// READ
const allPosts = await prisma.post.findMany()
console.log('Tüm postlar:', allPosts)
// UPDATE
const updated = await prisma.post.update({
where: { id: newPost.id },
data: { published: false },
})
// DELETE
await prisma.post.delete({ where: { id: newPost.id } })
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect())
Kodu çalıştırmadan önce package.json’a "type": "module" eklemeyi unutmayın.
6. Sık Kullanılan Prisma CLI Komutları
Komut Açıklamanpx prisma migrate dev
Geliştirme ortamında migration oluşturur ve uygular.
npx prisma migrate deploy
Üretim ortamında migration’ları sırayla çalıştırır.
npx prisma generate
Prisma Client’ı şemaya göre yeniden üretir.
npx prisma studio
Tarayıcı tabanlı veri görselleştirici açar.
npx prisma db push
Şemayı hızlıca veritabanına iter (migration oluşturmaz).
npx prisma migrate reset
Tüm verileri siler, migration’ları tekrar uygular.

7. Ortak Hatalar ve Çözümleri
- “P1010: User was denied access” → PostgreSQL’de kullanıcıya veritabanı yetkisi verin:
GRANT ALL ON DATABASE mydb TO myuser; - “Generator not found” →
@prisma/clientpaketini tekrar yükleyin. - Migration geçmiyor → Elle müdahale edilen veritabanında
prisma migrate resolve --rolled-backile durumu eşitleyin.
8. İleri Seviye İpuçları
- İlişkiler:
@relationile foreign key tanımlayın; Prisma otomatik join sağlar. - Transaksiyon:
prisma.$transaction([...])ile atomic işlemler yapın. - Raw SQL:
prisma.$queryRawile karmaşık sorguları tip güvenli çalıştırın. - Çevre değişkenleri:
datasource db { provider = env("DB_PROVIDER") }ile çoklu ortam desteği sağlayın.
Sonuç
Prisma, kurulumdan üretime kadar tip güvenliği ve güçlü CLI’sıyla geliştirme hızınızı katlar. Yukarıdaki adımları izleyerek dakikalar içinde veritabanı katmanınızı hazır hâle getirebilir, temel CRUD işlemlerini yazabilir ve migration stratejinizi otomatikleştirebilirsiniz. Daha fazla detay için resmi dokümantasyonu ziyaret etmeyi unutmayın; iyi kodlamalar!