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 -vPostgreSQL, 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-demo
- npm init -y
- npm install prisma @prisma/client
- npx 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 initBu 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çıklama npx 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/client paketini tekrar yükleyin.
- Migration geçmiyor → Elle müdahale edilen veritabanında prisma migrate resolve --rolled-back ile durumu eşitleyin.
8. İleri Seviye İpuçları
- İlişkiler: @relation ile foreign key tanımlayın; Prisma otomatik join sağlar.
- Transaksiyon: prisma.$transaction([...]) ile atomic işlemler yapın.
- Raw SQL: prisma.$queryRaw ile 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!