在 Next.js 中播种 Prisma 数据库
使用数据库时,有一些初始数据很方便。 想象一下成为一名新开发人员。如果您需要手动设置所有这些数据,那将是一件痛苦的事情。 这就是迁移派上用场的地方。 Prisma 有一种超级简单的方法来处理这些迁移。今天,我们将创建播种机! 创建 Prisma 种子文件 在prisma文件夹中创建一个名为seed.ts的新文件。 该文件将处理我们的种子,粗略的布局如下所示: import { PrismaClie
使用数据库时,有一些初始数据很方便。
想象一下成为一名新开发人员。如果您需要手动设置所有这些数据,那将是一件痛苦的事情。
这就是迁移派上用场的地方。
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 dev
或prisma migrate reset
时,种子也会运行。
您可以在下面的视频中看到播种的实际效果。
[](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
更多推荐
所有评论(0)