← FC Coder · HomePhase 03 · Lesson 30 · 60 min
Lesson30
Phase Three · Fullstack · Matchday 30 · The Cabinet
SQLite + Drizzle
数据库 = 一个文件
Today's 3 Jobs · 今天这三件事
- 01lib/db.ts · better-sqlite3 + drizzle 5 行data.db 自动建
- 02drizzle.config.ts · 5 行下节课 push 用
- 03🌟 data.db 出现 + 进 gitignore档案柜立起来
单文件数据库(骨架 plan Phase 3 本质点)。SQLite = `data.db` + better-sqlite3 库 · 不是远端服务器。Drizzle = 写 TS 不写 SQL(ORM)。俱乐部档案柜比喻 —— 多个抽屉(表)· 每抽屉卡片(行)。Cursor AI Supervised 继续。
Concept · 文件就是数据库
data.db · better-sqlite3 · Drizzle
import Database from 'better-sqlite3';
import { drizzle } from 'drizzle-orm/better-sqlite3';
const sqlite = new Database('data.db');
export const db = drizzle(sqlite);
import { drizzle } from 'drizzle-orm/better-sqlite3';
const sqlite = new Database('data.db');
export const db = drizzle(sqlite);
data.db
文件 · 几 KB-MB · 仓库根
better-sqlite3
读 .db 的 Node 库
Drizzle
TS ORM · 写 select() 不写 SELECT
5 行 lib/db.ts + 5 行 drizzle.config.ts 就开张了。data.db / drizzle 都进 gitignore。
Half 2 · 在屏幕上
装包确认 · 连接 · gitignore
01前置确认(父亲已装包)
01Min
确认 node_modules 有 drizzle-orm + better-sqlite3
父亲提前 1 周 pnpm i better-sqlite3 drizzle-orm + pnpm i -D drizzle-kit @types/better-sqlite3。课堂确认。
02lib/db.ts + drizzle.config.ts
02Min
新建 lib/db.ts · 5 行
import Database from 'better-sqlite3'; import { drizzle } from 'drizzle-orm/better-sqlite3'; const sqlite = new Database('data.db'); export const db = drizzle(sqlite);
03Min
新建 drizzle.config.ts · 5 行
import { defineConfig } from 'drizzle-kit'; export default defineConfig({ dialect: 'sqlite', schema: './lib/schema.ts', out: './drizzle', dbCredentials: { url: 'data.db' } });
03gitignore + AI 解释
04Min
加 data.db / data.db-journal / /drizzle 到 .gitignore
数据不 commit。代码 + seed 脚本足够恢复。
05Min
终端跑一次 · data.db 出现
node -e "require('better-sqlite3')('data.db')" 或直接访问任何用 db 的页。Cursor 左树看到 data.db。
06Min
AI Supervised:解释 lib/db.ts 每一行
Cmd+L 选 lib/db.ts · '解释每一行'。爸爸陪坐 · 看 import / better-sqlite3 / drizzle 关系。
07Min
📸 截图 Cursor 左树有 data.db
Phase 3 第五张战利品。
讲给爸爸听
4 题 · DB 入门
01SQLite 和 localStorage 差在哪?Hint ↓
都是文件 · SQLite 在服务器 · localStorage 在浏览器。SQLite 能 SQL · 多用户。
02为什么用 Drizzle 不直接写 SQL?Hint ↓
TS 补全 + 类型 + 拼错抓得到。和 Phase 2 第 20 课 interface 心法一致。
03data.db 为什么 gitignore?Hint ↓
数据因机器而异。代码 + seed 脚本足够恢复。代码 / 数据分开。
04drizzle-kit 是干什么的?Hint ↓
下节课讲 —— 把 TS schema 同步到真数据库表结构(migrate / push)。
温度计
给「档案柜」打分
今天难度Difficulty
0
今天开心Fun
0
Final Whistle · 终场哨
档案柜立起来了 —— data.db 是仓库一个文件。
还有 7 步没打勾。Step 5 data.db 出现 = 算过。