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:

  1. Create a new file prisma/seed.ts.

  2. 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()
    })
  3. Add typescript, ts-node and @types/node development dependencies:

    npm install -D typescript ts-node @types/node
  4. To 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:

  1. Create a new file prisma/seed.js

  2. 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()
    })
  3. 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.
Edit this page on GitHub