← FC Coder · HomePhase 03 · Lesson 30 · 60 min
Lesson30
Phase Three · Fullstack · Matchday 30 · The Cabinet

SQLite + Drizzle
数据库 = 一个文件

Today's 3 Jobs · 今天这三件事
  1. 01
    lib/db.ts · better-sqlite3 + drizzle 5 行
    data.db 自动建
  2. 02
    drizzle.config.ts · 5 行
    下节课 push 用
  3. 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

Chalk Board · 三个零件
import Database from 'better-sqlite3';
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 出现 = 算过。