Prisma CLI
Website: https://www.prisma.io CLI Tool: prisma Authentication: Database connection strings
Description
Prisma is a next-generation ORM (Object-Relational Mapping) for Node.js and TypeScript. The Prisma CLI manages database schemas, migrations, and generates type-safe database clients. Essential for modern backend development with databases like PostgreSQL, MySQL, SQLite, MongoDB, and SQL Server.
Commands
Initialization
Initialize Prisma
prisma init
prisma init --datasource-provider postgresql
prisma init --datasource-provider mysql
prisma init --datasource-provider sqlite
prisma init --datasource-provider mongodb
Initialize Prisma in project, creates prisma/schema.prisma.
Schema Management
Format Schema
prisma format
Format Prisma schema file.
Validate Schema
prisma validate
Validate schema for errors.
Generate Client
prisma generate
prisma generate --watch
Generate Prisma Client from schema. Use --watch for development.
Database Operations
Push Schema
prisma db push
prisma db push --skip-generate
prisma db push --accept-data-loss
Push schema state to database (dev only, no migrations).
Pull Schema
prisma db pull
prisma db pull --force
Introspect database and update schema.
Execute SQL
prisma db execute --file schema.sql --schema prisma/schema.prisma
Execute raw SQL against database.
Seed Database
prisma db seed
Run seed script defined in package.json.
Migrations
Create Migration
prisma migrate dev
prisma migrate dev --name init
prisma migrate dev --name add_users_table
prisma migrate dev --create-only
Create and apply migration in development.
Apply Migrations
prisma migrate deploy
Apply pending migrations in production.
Migration Status
prisma migrate status
Check migration status.
Reset Database
prisma migrate reset
prisma migrate reset --skip-seed
Reset database and re-apply all migrations.
Resolve Migration
prisma migrate resolve --applied <migration>
prisma migrate resolve --rolled-back <migration>
Mark migration as applied or rolled back.
Diff
prisma migrate diff \
--from-schema-datamodel prisma/schema.prisma \
--to-schema-datasource prisma/schema.prisma
Compare schema states.
Studio
Open Prisma Studio
prisma studio
prisma studio --port 5555
prisma studio --browser none
Open GUI to view and edit database data.
Introspection
Introspect Database
prisma db pull
prisma db pull --print
prisma db pull --force
Generate schema from existing database.
Version Management
Version Info
prisma version
prisma -v
Show Prisma version.
Debug
Debug Mode
DEBUG=* prisma generate
DEBUG=prisma:engine prisma generate
Run commands with debug output.
Examples
New Project Setup
# Initialize Prisma
npm install -D prisma
npx prisma init
# Edit prisma/schema.prisma
# Add your models
# Create database and tables
npx prisma db push
# Generate Prisma Client
npx prisma generate
# Open Studio to view data
npx prisma studio
Schema Example
// prisma/schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
Development Workflow
# Make schema changes
# Edit prisma/schema.prisma
# Create migration
npx prisma migrate dev --name add_post_views
# Generate updated client
npx prisma generate
# View data in Studio
npx prisma studio
Migration Workflow
# Development: create and apply migration
npx prisma migrate dev --name initial_schema
# Check migration status
npx prisma migrate status
# Production: apply pending migrations
npx prisma migrate deploy
# If issues occur, resolve
npx prisma migrate resolve --applied 20240101000000_migration_name
Database Operations
# Push schema changes (dev only)
npx prisma db push
# Pull schema from database
npx prisma db pull
# Reset database
npx prisma migrate reset
# Seed database
npx prisma db seed
Seed Script
// prisma/seed.js
const { PrismaClient } = require('@prisma/client')
const prisma = new PrismaClient()
async function main() {
const user = await prisma.user.create({
data: {
email: 'alice@example.com',
name: 'Alice',
posts: {
create: [
{ title: 'First Post', content: 'Hello World' }
]
}
}
})
console.log({ user })
}
main()
.catch(e => console.error(e))
.finally(async () => await prisma.$disconnect())
// package.json
{
"prisma": {
"seed": "node prisma/seed.js"
}
}
Using Prisma Client
// app.ts
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
// Create user
const user = await prisma.user.create({
data: {
email: 'bob@example.com',
name: 'Bob'
}
})
// Find users
const users = await prisma.user.findMany({
include: { posts: true }
})
// Update user
await prisma.user.update({
where: { id: 1 },
data: { name: 'Bobby' }
})
// Delete user
await prisma.user.delete({
where: { id: 1 }
})
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect())
Multiple Databases
// prisma/schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
datasource analytics {
provider = "mysql"
url = env("ANALYTICS_DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
CI/CD Integration
# .github/workflows/deploy.yml
- name: Run migrations
run: npx prisma migrate deploy
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
- name: Generate Prisma Client
run: npx prisma generate
Introspection Workflow
# Pull schema from existing database
npx prisma db pull
# Review generated schema
cat prisma/schema.prisma
# Generate client
npx prisma generate
# Now you can use Prisma with existing database
Custom Output
generator client {
provider = "prisma-client-js"
output = "../src/generated/client"
}
Debugging
# Enable debug logs
DEBUG=prisma:* npx prisma migrate dev
# Engine logs
DEBUG=prisma:engine npx prisma generate
# Query logs
DEBUG=prisma:query npx prisma studio
Schema Validation
# Validate schema
npx prisma validate
# Format schema
npx prisma format
# Check for issues
npx prisma validate --schema prisma/schema.prisma
Studio for Data Management
# Open Studio
npx prisma studio
# Custom port
npx prisma studio --port 5556
# Headless mode
npx prisma studio --browser none
# Specific schema
npx prisma studio --schema ./custom/schema.prisma
Notes
- Schema File: prisma/schema.prisma defines data models
- Prisma Client: Auto-generated, type-safe database client
- Migrations: Version-controlled schema changes
- Studio: Visual editor for database
- Data Sources: PostgreSQL, MySQL, SQLite, MongoDB, SQL Server, CockroachDB
- Generators: Prisma Client, custom generators
- Relations: One-to-one, one-to-many, many-to-many
- Indexes: @unique, @@index for performance
- Default Values: @default for field defaults
- Auto-increment: @id @default(autoincrement())
- Timestamps: @updatedAt for automatic updates
- Enums: Enumerated types support
- JSON: JSON field type support
- Raw SQL: Can execute raw queries when needed
- Transactions: Supports database transactions
- Connection Pooling: Built-in connection management
- Middleware: Intercept queries for logging, etc.
- Schema Validation: Compile-time type checking
- Migration History: Stored in _prisma_migrations table
- Seed Data: Populate database with initial data
- Environment Variables: Use .env for DATABASE_URL
- Prisma Engines: Query, migration, introspection engines
- Preview Features: Experimental features in schema
- Multi-schema: Support for multiple database schemas
- Native Types: Database-specific type mappings
- Referential Actions: Cascade, SetNull, etc.
- Best Practices:
- Use migrations in production (not db push)
- Never edit migrations manually
- Always generate client after schema changes
- Use seeding for test data
- Enable query logging in development
- Use transactions for complex operations
- Index frequently queried fields
- Use select/include to optimize queries
- Handle errors properly
- Disconnect client when done
- Use connection pooling in serverless
- Version control schema.prisma
- Keep migrations in git
- Test migrations before deploying
Comments (0)
Add a Comment
No comments yet. Be the first to comment!