← FC Coder · HomePhase 03 · Lesson 32 · 60 min
Lesson32
Phase Three · Fullstack · Matchday 32 · Moving In
Seed 数据库
搬家工搬卡片进抽屉
Today's 3 Jobs · 今天这三件事
- 01scripts/seed.ts · 循环 insert + onConflictDoNothing搬家工
- 02pnpm tsx scripts/seed.ts · 22 行进表终端看完成
- 03🌟 drizzle-kit studio · 22 行可见数据真在了
30/31 课 DB + 表立起来 · 0 行。今天写 seed 脚本 · `app/data/players.json` 22 人灌进 players 表。`onConflictDoNothing()` 让脚本可重复跑(unique name 撞了静默跳过)。studio 浏览器验证。
Concept · Seed 脚本
可重复 · 安全 · 单一来源
for (const p of data) {
await db.insert(players).values(p).onConflictDoNothing();
}
await db.insert(players).values(p).onConflictDoNothing();
}
import
db · schema · data JSON
for
await db.insert(players).values(p)
conflict
.onConflictDoNothing()
seed.ts commit · data.db gitignore。代码 / 数据分开 —— 第 30 课 cheat 复用。
Half 2 · 在屏幕上
seed · 跑 · studio 验证
01写 seed.ts
01Min
Cursor + pnpm dev
老三件套。
02Min
新建 scripts/seed.ts
import { db } from '../lib/db'; import { players } from '../lib/schema'; import data from '../app/data/players.json';
03Min
for...of 循环 insert + onConflictDoNothing
for (const p of data) { await db.insert(players).values(p).onConflictDoNothing(); } console.log 行数。
02跑 + studio 验证
04Min
终端 pnpm tsx scripts/seed.ts
看 'inserting 22 ... done. 22 rows.'。
05Min
drizzle-kit studio · 看 22 行
🌟 浏览器界面 · 哈兰德 / 福登 / 罗德里 等 22 行真在。
03重跑 + AI reset
06Min
再跑一次 seed —— onConflict 让它静默跳过
0 新增。这是 seed 应该有的属性:可重复跑。
07Min
AI Supervised:加 --reset flag · delete + 重灌
Cmd+K · '加 --reset 参数 · 如果传则先 db.delete(players) 再 insert'。
08Min
📸 截图 studio 22 行
Phase 3 第七张战利品。
讲给爸爸听
4 题 · Seed 心法
01Seed 是什么?Hint ↓
搬家工 —— 把初始数据灌进空表。每个新环境都需要。
02onConflictDoNothing 为什么?Hint ↓
unique 约束撞了不报错 · 跳过。让 seed 可重复跑。
03seed.ts commit 吗?Hint ↓
Yes(代码)。data.db 不 commit · 但 seed.ts 能恢复它。
04想清表重灌怎么办?Hint ↓
db.delete(players) 再 insert。或 drop table push 重来。
温度计
给「搬家工」打分
今天难度Difficulty
0
今天开心Fun
0
Final Whistle · 终场哨
卡片搬进抽屉 —— 22 行 players 都在。
还有 8 步没打勾。Step 5 studio 看到 22 行 = 算过。