Prisma ORM
Type-safe database access with auto-generated queries.
Quick Start
// schema.prisma
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
author User @relation(fields: [authorId], references: [id])
authorId Int
}
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
// Type-safe query
const user = await prisma.user.create({
data: {
email: 'alice@example.com',
posts: { create: { title: 'Hello Prisma' } }
},
include: { posts: true }
});
When to Use
- Type-safe database access
- Rapid schema evolution with migrations
- Not for complex raw SQL queries
Step-by-Step Instructions
- Install:
npm install prisma @prisma/client - Init:
npx prisma init - Define models in
schema.prisma - Migrate:
npx prisma migrate dev
Dependencies
npm install prisma @prisma/client
npx prisma init
Examples
Input: prisma.user.findMany({ where: { email: { contains: "@" } } }) → Output: All users with @ in email
Resources
Troubleshooting
PrismaClientInitializationError— the schema is out of sync. Re-runnpx prisma generateand check theDATABASE_URLis reachable.- Introspection overwrites custom types — treat
prisma db pullas an initial scaffold; re-apply manual types and relations afterwards. - Relation queries are slow — missing index. Add
@@indexon foreign keys and use the Prisma Data Platform for query analysis. - Migrations drift on team branches — run
prisma migrate devearly and often; rebase migrations instead of resetting the database.
Validation
- Schema validates:
npx prisma validate - Migration applies successfully
- Generated client is type-safe