使用数据库时,有一些初始数据很方便。

想象一下成为一名新开发人员。如果您需要手动设置所有这些数据,那将是一件痛苦的事情。

这就是迁移派上用场的地方。

Prisma 有一种超级简单的方法来处理这些迁移。今天,我们将创建播种机!

创建 Prisma 种子文件

prisma文件夹中创建一个名为seed.ts的新文件。

该文件将处理我们的种子,粗略的布局如下所示:

import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();

async function main() {
  // Do stuff
}

main()
  .catch((e) => {
    console.error(e);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  });

进入全屏模式 退出全屏模式

如您所见,这会加载 Prisma 客户端。然后我们定义主函数,它是一个异步函数。

最终,我们调用这个函数来捕获错误并在完成后断开连接。

在继续之前,让我们为我们在 Prisma](https://daily-dev-tips.com/posts/adding-prisma-to-a-nextjs-project/)中制作的[播放列表模型创建一个数据文件。

我在这个prisma文件夹中创建了一个seeds文件夹。

在该seeds文件夹中,创建一个名为playlists.ts的文件。

export const playlists = [
  {
    title: 'Wake Up Happy',
    image: 'https://i.scdn.co/image/ab67706f000000030bd6693bac1f89a70d623e4d',
    uri: 'spotify:playlist:37i9dQZF1DX0UrRvztWcAU',
  },
  {
    title: 'Morning Motivation',
    image: 'https://i.scdn.co/image/ab67706f00000003037da32de996d7c859b3b563',
    uri: 'spotify:playlist:37i9dQZF1DXc5e2bJhV6pu',
  },
  {
    title: 'Walking On Sunshine',
    image: 'https://i.scdn.co/image/ab67706f000000035611e6effd70cdc11d0c7076',
    uri: 'spotify:playlist:37i9dQZF1DWYAcBZSAVhlf',
  },
];

进入全屏模式 退出全屏模式

如您所见,这类似于我们的字段,我们在此处添加了三个播放列表。

现在返回seed.ts文件并导入此文件。

import { playlists } from './seeds/playlists';

进入全屏模式 退出全屏模式

现在在我们的main函数中,我们可以在 Prisma 客户端上使用createMany函数。

async function main() {
  await prisma.playlist.createMany({
    data: playlists,
  });
}

进入全屏模式 退出全屏模式

这将使用我们刚刚添加的数据创建许多播放列表。

在 Prisma 中运行种子

接下来我们需要的是一种运行这个种子脚本的方法。

在此之前,我们需要安装ts-node作为开发依赖项:

npm install ts-node -D

进入全屏模式 退出全屏模式

然后转到您的package.json文件并添加一个prisma部分。

{
    // Other stuff
  "prisma": {
    "seed": "ts-node prisma/seed.ts"
  },
}

进入全屏模式 退出全屏模式

要运行迁移,您可以运行以下命令:

npx prisma db seed

进入全屏模式 退出全屏模式

当您执行prisma migrate devprisma migrate reset时,种子也会运行。

您可以在下面的视频中看到播种的实际效果。

[在 Next.js 中播种 Prisma 数据库](https://res.cloudinary.com/practicaldev/image/fetch/s--KIc1jzOl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https: //cdn.hashnode.com/res/hashnode/image/upload/v1634189913934/UcjcXY5Bo.gif)

如果您想查看已完成的项目,它托管在GitHub上。

感谢您的阅读,让我们联系吧!

感谢您阅读我的博客。随时订阅我的电子邮件通讯并联系Facebook或Twitter

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐