← FC Coder · HomePhase 03 · Lesson 32 · 60 min
Lesson32
Phase Three · Fullstack · Matchday 32 · Moving In

Seed 数据库
搬家工搬卡片进抽屉

Today's 3 Jobs · 今天这三件事
  1. 01
    scripts/seed.ts · 循环 insert + onConflictDoNothing
    搬家工
  2. 02
    pnpm tsx scripts/seed.ts · 22 行进表
    终端看完成
  3. 03
    🌟 drizzle-kit studio · 22 行可见
    数据真在了

30/31 课 DB + 表立起来 · 0 行。今天写 seed 脚本 · `app/data/players.json` 22 人灌进 players 表。`onConflictDoNothing()` 让脚本可重复跑(unique name 撞了静默跳过)。studio 浏览器验证。

Concept · Seed 脚本

可重复 · 安全 · 单一来源

Chalk Board · insert 流程
for (const p of data) {
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 行 = 算过。