34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
// xuchao: 单词词库种子——words.json 灌入 word_entry;仅表空时全量灌入,已有数据视为家长已编辑,跳过
|
|
import { sql } from "drizzle-orm";
|
|
import { drizzle } from "drizzle-orm/mysql2";
|
|
import mysql from "mysql2/promise";
|
|
import raw from "../src/content/words/words.json";
|
|
import { wordEntry } from "../src/db/schema";
|
|
|
|
async function main() {
|
|
const conn = await mysql.createConnection(process.env.DATABASE_URL!);
|
|
const db = drizzle(conn);
|
|
|
|
const [cnt] = await db.select({ n: sql<number>`COUNT(*)` }).from(wordEntry);
|
|
if (cnt.n > 0) {
|
|
console.log("word_entry 已有", cnt.n, "条,跳过灌入(视为已编辑数据)");
|
|
await conn.end();
|
|
return;
|
|
}
|
|
|
|
const rows = (raw as { word: string; meaning: string; day: number; seq: number }[]).map((w) => ({
|
|
word: w.word,
|
|
meaning: w.meaning,
|
|
day: w.day,
|
|
seq: w.seq,
|
|
}));
|
|
// 分批插入,避免单条 SQL 过大
|
|
for (let i = 0; i < rows.length; i += 500) {
|
|
await db.insert(wordEntry).values(rows.slice(i, i + 500));
|
|
}
|
|
console.log("word_entry 灌入完成:", rows.length, "条");
|
|
await conn.end();
|
|
}
|
|
|
|
main();
|