课程管理新增单词与数学思维内容编辑:单词词库落库(word_entry+0007迁移,表空回退words.json),家长端按天增删改单词;数学思维编辑器对标语法编辑器;课程管理加入两张入口卡片
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
ab84bec1b4
commit
5f207e4a57
@@ -0,0 +1,33 @@
|
||||
// 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();
|
||||
Reference in New Issue
Block a user