PrismaでSeedでデータを投入する
前回
Prisma?
今回
Seedでデータを投入する
やり方
なんかprisma/seed.ts
を作成して、データを登録する処理を書くみたい
やってみる
プロジェクト構成は前回のまま
package.json
{ "name": "app", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "@prisma/client": "^3.5.0", "@types/express": "^4.17.13", "@types/node": "^16.11.9", "express": "^4.17.1", "ts-node": "^10.4.0", "typescript": "^4.5.2" }, "devDependencies": { "prisma": "^3.5.0" } }
スクリプト作成
参考になりそうなもの
prisma/seed.ts
import { PrismaClient, Prisma } from '@prisma/client' const prisma = new PrismaClient() // モデル投入用のデータ定義 const userData: Prisma.UserCreateInput[] = [ { name: 'hoge1', email: 'hoge1@example.com', }, { name: 'hoge2', email: 'hoge2@example.com', }, { name: 'hoge3', email: 'hoge3@example.com', }, ] const transfer = async () => { const users = []; for (const u of userData) { const user = prisma.user.create({ data: u, }) users.push(user); } return await prisma.$transaction(users); } // 定義されたデータを実際のモデルへ登録する処理 const main = async () => { console.log(`Start seeding ...`) await transfer(); console.log(`Seeding finished.`) } // 処理開始 main() .catch((e) => { console.error(e) process.exit(1) }) .finally(async () => { await prisma.$disconnect() })
seedコマンドを追加
package.json
以下を追加
"prisma": { "seed": "ts-node prisma/seed.ts" }
実行
app# npx prisma db seed Environment variables loaded from .env Running seed command `ts-node prisma/seed.ts` ... Start seeding ... Seeding finished. 🌱 The seed command has been executed. app#
↓
OK
所感
seed.ts
に共通処理を記載して、あとはデータやテーブルは別ファイルで管理すればそこまで肥大化しないのでは
と思っている。
次はそうだな…expressと連携してAPI経由でデータを取得するところをやってみよう。