Seeding your database with Prisma Client
This guide describes how to seed your database using Prisma Client and Prisma's integrated seeding functionality (Preview). Seeding allows you to consistently re-create the same data in your database and can be used to:
- Populate your database with data that is required for your application to start - for example, a default language or a default currency.
- Provide basic data for validating and using your application in a development environment. This is particulary useful if you are using Prisma Migrate, which sometimes requires resetting your development database.
Watch the following video for an introduction to the db seed
command:
Set up seeding in TypeScript
If you are using TypeScript, follow these steps:
Create a new file
prisma/seed.ts
.In the
prisma/seed.ts
file, import Prisma Client, instantiate it, and create some records. For example:import { PrismaClient } from '@prisma/client'const prisma = new PrismaClient()async function main() {const alice = await prisma.user.upsert({where: { email: 'alice@prisma.io' },update: {},create: {email: `alice@prisma.io`,name: 'Alice',posts: {create: {title: 'Check out Prisma with Next.js',content: 'https://www.prisma.io/nextjs',published: true,},},},})const bob = await prisma.user.upsert({where: { email: 'bob@prisma.io' },update: {},create: {email: `bob@prisma.io`,name: 'Bob',posts: {create: [{title: 'Follow Prisma on Twitter',content: 'https://twitter.com/prisma',published: true,},{title: 'Follow Nexus on Twitter',content: 'https://twitter.com/nexusgql',published: true,},],},},})console.log({ alice, bob })}main().catch(e => {console.error(e)process.exit(1)}).finally(async () => {await prisma.$disconnect()})Add
typescript
,ts-node
and@types/node
development dependencies:npm install -D typescript ts-node @types/nodeTo seed the database, run the
db seed
CLI command:prisma db seed --preview-feature
Set up seeding in JavaScript
If you are using JavaScript, follow these steps:
Create a new file
prisma/seed.js
In the
prisma/seed.js
file, import Prisma Client, initialize it and create some records. For example:const { PrismaClient } = require('@prisma/client')const prisma = new PrismaClient()async function main() {const alice = await prisma.user.upsert({where: { email: 'alice@prisma.io' },update: {},create: {email: `alice@prisma.io`,name: 'Alice',posts: {create: {title: 'Check out Prisma with Next.js',content: 'https://www.prisma.io/nextjs',published: true,},},},})const bob = await prisma.user.upsert({where: { email: 'bob@prisma.io' },update: {},create: {email: `bob@prisma.io`,name: 'Bob',posts: {create: [{title: 'Follow Prisma on Twitter',content: 'https://twitter.com/prisma',published: true,},{title: 'Follow Nexus on Twitter',content: 'https://twitter.com/nexusgql',published: true,},],},},})console.log({ alice, bob })}main().catch(e => {console.error(e)process.exit(1)}).finally(async () => {await prisma.$disconnect()})To seed the database, run the
db seed
CLI command:prisma db seed --preview-feature
Integrated seeding with Prisma Migrate
Prisma Migrate integrates seamlessly with your seeds, assuming you follow the steps in the previous section. When Prisma Migrate resets the development database, seeding is triggered automatically. Prisma Migrate resets the database and triggers seeding in the following scenarios:
- You manually run the
prisma migrate reset --preview-feature
CLI command. - The database is reset interactively in the context of using
prisma migrate dev --preview-feature
- for example, as a result of migration history conflicts or database drift.