Files
2026gaokaozhiyuan/deploy/backend/seed_data.py
T

385 lines
19 KiB
Python
Raw Normal View History

2026-06-24 13:11:34 +08:00
"""
问卷种子数据 — 首次启动时自动初始化
重新设计:开放式问题,不预设立场,不提具体专业名
"""
import sqlite3
import json
import os
DB_PATH = os.path.join(os.path.dirname(__file__), "data", "gaokao.db")
def seed():
conn = sqlite3.connect(DB_PATH)
conn.execute("PRAGMA journal_mode=WAL")
conn.execute("PRAGMA foreign_keys=ON")
# 初始化表结构
conn.executescript("""
CREATE TABLE IF NOT EXISTS questionnaires (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
description TEXT,
questions TEXT NOT NULL,
target_user TEXT DEFAULT '天恒',
created_at TEXT DEFAULT (datetime('now', 'localtime'))
);
CREATE TABLE IF NOT EXISTS responses (
id INTEGER PRIMARY KEY AUTOINCREMENT,
questionnaire_id INTEGER NOT NULL,
user_name TEXT NOT NULL,
answers TEXT NOT NULL,
created_at TEXT DEFAULT (datetime('now', 'localtime')),
FOREIGN KEY (questionnaire_id) REFERENCES questionnaires(id)
);
""")
# 迁移:为已有表添加 target_user 列(如果不存在)
try:
conn.execute("ALTER TABLE questionnaires ADD COLUMN target_user TEXT DEFAULT '天恒'")
conn.commit()
except sqlite3.OperationalError:
pass # 列已存在
# 检查是否已有问卷数据(幂等:不重复插入)
existing = conn.execute("SELECT COUNT(*) FROM questionnaires").fetchone()[0]
if existing > 0:
print(f"[seed] 问卷已存在({existing}份),跳过初始化")
conn.close()
return
# ================================================================
# 问卷1: 综合兴趣和偏好问卷(合并版)
# 将原"职业兴趣体验问卷"+"性格与行为模式问卷"+"院校偏好问卷"合并为一份
# 内分三个分区,带分区标题
# ================================================================
merged_qs = [
# ---- 第一分区:职业兴趣体验 ----
{"id": "SEC1", "type": "section", "title": "第一分区:职业兴趣体验",
"desc": "以下问题没有标准答案,请根据你的真实感受和经历回答,不需要考虑应该怎么回答,只描述你最真实的想法。"},
{"id": "E1", "text": "做什么事情的时候,你会觉得时间过得特别快?",
"type": "text", "placeholder": "比如:写代码、设计海报、打游戏、和朋友聊天..."},
{"id": "E2", "text": "当你完成了一件很有挑战性的事情,你通常是什么感受?",
"type": "text", "placeholder": "比如:很有成就感、想再挑战更高的、没什么特别..."},
{"id": "E3", "text": "如果让你连续做同一件事10个小时,你最不可能选择做什么?",
"type": "text", "placeholder": "写下你不会做的事情..."},
{"id": "C1", "text": "在团队合作中,你通常扮演什么角色?",
"type": "single",
"options": [
{"value": "A", "label": "我来做决定,大家听我的"},
{"value": "B", "label": "我听大家的,协调配合"},
{"value": "C", "label": "我负责具体执行"},
{"value": "D", "label": "我负责发现问题,提醒大家"},
{"value": "E", "label": "看情况,不一定"},
]},
{"id": "C2", "text": "你更倾向于独立工作还是团队协作?",
"type": "single",
"options": [
{"value": "A", "label": "独立完成,更有掌控感"},
{"value": "B", "label": "团队协作,分工合作"},
{"value": "C", "label": "两者都可以,看任务性质"},
]},
{"id": "S1", "text": "什么事情做得好会让你觉得自己很厉害?",
"type": "text", "placeholder": "比如:解出一道难题、完成一个作品..."},
{"id": "S2", "text": "什么东西没做好会让你想放弃?",
"type": "text", "placeholder": "比如:反复失败、被人否定、看不到进步..."},
{"id": "L1", "text": "学习新东西时,你更习惯于?",
"type": "single",
"options": [
{"value": "A", "label": "先看教程/文档,搞懂原理再动手"},
{"value": "B", "label": "直接动手做,遇到问题再查"},
{"value": "C", "label": "有人教我,带着我做"},
{"value": "D", "label": "边做边学,一起进行"},
]},
{"id": "L2", "text": "面对一个完全陌生的事物,你会怎么做?",
"type": "single",
"options": [
{"value": "A", "label": "先搜索相关资料,全面了解"},
{"value": "B", "label": "直接尝试,不懂就问"},
{"value": "C", "label": "找有经验的人带路"},
{"value": "D", "label": "先观望,等别人先试"},
]},
{"id": "W1", "text": "你理想中最完美的一天是什么样的?",
"type": "text", "placeholder": "描述你理想的一天..."},
{"id": "W2", "text": "你更看重工作/学习的哪个方面?",
"type": "multiple",
"options": [
{"value": "A", "label": "有挑战,能成长"},
{"value": "B", "label": "有成就感,被认可"},
{"value": "C", "label": "能发挥创意"},
{"value": "D", "label": "稳定,不担心失业"},
{"value": "E", "label": "收入高"},
{"value": "F", "label": "时间灵活"},
]},
# ---- 第二分区:性格与行为模式 ----
{"id": "SEC2", "type": "section", "title": "第二分区:性格与行为模式",
"desc": "以下问题了解你在日常生活中的行为偏好,没有好坏对错之分,请如实选择最符合你实际情况的选项。"},
{"id": "B1", "text": "在社交场合中,你的能量通常从哪里来?",
"type": "single",
"options": [
{"value": "A", "label": "和很多人在一起,聊天交流"},
{"value": "B", "label": "独处,安静思考"},
{"value": "C", "label": "看情况,有时喜欢热闹有时喜欢安静"},
]},
{"id": "B2", "text": "做重要决定时,你通常会?",
"type": "single",
"options": [
{"value": "A", "label": "和很多人讨论后再决定"},
{"value": "B", "label": "自己仔细想清楚再决定"},
{"value": "C", "label": "凭直觉,先做了再说"},
]},
{"id": "B3", "text": "你更容易注意到事物的哪些方面?",
"type": "single",
"options": [
{"value": "A", "label": "具体的事实和细节"},
{"value": "B", "label": "整体的可能性和想象力"},
{"value": "C", "label": "两者差不多"},
]},
{"id": "B4", "text": "描述一个你经历过的事情,你通常会?",
"type": "single",
"options": [
{"value": "A", "label": "详细还原过程和细节"},
{"value": "B", "label": "讲重点和感受,略过细节"},
{"value": "C", "label": "加入自己的理解和联想"},
]},
{"id": "B5", "text": "当你和别人的观点不同,你会怎么做?",
"type": "single",
"options": [
{"value": "A", "label": "坚持我的观点,给出逻辑理由"},
{"value": "B", "label": "考虑对方的感受,寻求共识"},
{"value": "C", "label": "看谁的理由更充分"},
{"value": "D", "label": "先听大家的,之后再决定"},
]},
{"id": "B6", "text": "你更容易被什么说服?",
"type": "single",
"options": [
{"value": "A", "label": "数据和逻辑分析"},
{"value": "B", "label": "情感故事和共情"},
{"value": "C", "label": "实际案例和效果"},
{"value": "D", "label": "权威人士的意见"},
]},
{"id": "B7", "text": "你更喜欢什么样的计划?",
"type": "single",
"options": [
{"value": "A", "label": "提前做好计划,按部就班"},
{"value": "B", "label": "有个大概方向,灵活调整"},
{"value": "C", "label": "不做计划,随机应变"},
]},
{"id": "B8", "text": "面对截止日期,你通常会?",
"type": "single",
"options": [
{"value": "A", "label": "提前完成,避免意外"},
{"value": "B", "label": "最后几天集中完成"},
{"value": "C", "label": "截止前一晚通宵搞定"},
{"value": "D", "label": "通常会拖到截止后"},
]},
{"id": "B9", "text": "你通常如何认识新朋友?",
"type": "single",
"options": [
{"value": "A", "label": "主动搭话,主动组织活动"},
{"value": "B", "label": "等别人来认识我"},
{"value": "C", "label": "通过共同朋友介绍"},
{"value": "D", "label": "在共同活动中自然认识"},
]},
{"id": "B10", "text": "当你遇到问题时,你通常会找谁?",
"type": "multiple",
"options": [
{"value": "A", "label": "自己想办法解决"},
{"value": "B", "label": "找父母或家人"},
{"value": "C", "label": "找朋友帮忙"},
{"value": "D", "label": "上网搜索答案"},
{"value": "E", "label": "找老师或权威人士"},
]},
# ---- 第三分区:院校偏好 ----
{"id": "SEC3", "type": "section", "title": "第三分区:院校偏好与未来规划",
"desc": "以下问题了解你对大学和未来的想法。没有对错,请选择最贴近你真实想法的选项。"},
{"id": "SCH1", "text": "你更倾向于在哪类城市上大学?",
"type": "single",
"options": [
{"value": "A", "label": "杭州/宁波等省内大城市"},
{"value": "B", "label": "省内其他城市(温州/嘉兴/台州等)"},
{"value": "C", "label": "省外一线城市(北京/上海/广州/深圳)"},
{"value": "D", "label": "省外新一线或二线城市(成都/武汉/西安等)"},
{"value": "E", "label": "哪里都行,不挑城市"},
]},
{"id": "SCH2", "text": "对离家距离的接受度?",
"type": "single",
"options": [
{"value": "A", "label": "最好省内,周末能回家"},
{"value": "B", "label": "江浙沪范围内就行,小长假能回"},
{"value": "C", "label": "全国都行,寒暑假回一次就够了"},
{"value": "D", "label": "越远越好,想看看外面的世界"},
]},
{"id": "SCH3", "text": "学校层次 vs 专业实力,怎么选?",
"type": "single",
"options": [
{"value": "A", "label": "优先学校牌子(985/211/双一流光环)"},
{"value": "B", "label": "优先专业实力(哪怕学校名气差一点)"},
{"value": "C", "label": "两者兼顾,取中间值"},
{"value": "D", "label": "无所谓,看缘分"},
]},
{"id": "SCH4", "text": "用一个词或一句话描述你感兴趣的方向(可以天马行空):",
"type": "text",
"placeholder": "比如:做游戏、设计产品、搞技术、研究 AI..."},
{"id": "SCH5", "text": "你为什么对这个方向感兴趣?",
"type": "text",
"placeholder": "可以是你的经历、性格、或者单纯的喜欢..."},
{"id": "SCH6", "text": "对大学教学方式的偏好?",
"type": "single",
"options": [
{"value": "A", "label": "小班制+项目制+导师制(像工作室一样)"},
{"value": "B", "label": "大班理论课为主也可以接受"},
{"value": "C", "label": "无所谓,能学到东西就行"},
]},
{"id": "SCH7", "text": "对学费的承受范围?",
"type": "single",
"options": [
{"value": "A", "label": "公办普通学费(5000~8000/年)"},
{"value": "B", "label": "可以接受稍高(1~3万/年)"},
{"value": "C", "label": "中外合作也可考虑(4~8万/年)"},
]},
{"id": "SCH8", "text": "大学毕业后第一优先级是?",
"type": "single",
"options": [
{"value": "A", "label": "直接就业,尽快经济独立"},
{"value": "B", "label": "考研深造,提升学历"},
{"value": "C", "label": "考公/考编,追求稳定"},
{"value": "D", "label": "还没想好"},
]},
{"id": "SCH9", "text": "你对大学校园氛围的偏好?",
"type": "single",
"options": [
{"value": "A", "label": "学术氛围浓厚,图书馆经常找不到座位"},
{"value": "B", "label": "创新创业活跃,社团和比赛多"},
{"value": "C", "label": "文艺气息重,艺术展演和创作空间多"},
{"value": "D", "label": "轻松自在就行,不要太大压力"},
]},
{"id": "SCH10", "text": "你对未来的薪资预期(毕业5年内)?",
"type": "single",
"options": [
{"value": "A", "label": "8~12万/年,能养活自己就行"},
{"value": "B", "label": "12~20万/年,中等偏上"},
{"value": "C", "label": "20万+/年,越高越好"},
{"value": "D", "label": "没概念,不太关心"},
]},
]
# ================================================================
# 问卷2: 家庭期望对齐问卷(去掉具体专业名)
# 只问抽象的期望,不预设任何方向
# ================================================================
family_qs = [
{
"id": "F1", "text": "你认为天恒大学毕业后最理想的去向是?",
"type": "single",
"options": [
{"value": "A", "label": "在杭州/宁波就业,离家近"},
{"value": "B", "label": "去一线城市闯一闯"},
{"value": "C", "label": "考研/深造后再决定"},
{"value": "D", "label": "尊重天恒自己的选择"},
]
},
{
"id": "F2", "text": "天恒现在感兴趣的方向,你了解多少?",
"type": "single",
"options": [
{"value": "A", "label": "非常了解,经常和他讨论"},
{"value": "B", "label": "大概知道,但不深入"},
{"value": "C", "label": "不太清楚,他没说过"},
{"value": "D", "label": "他感兴趣的方向我不太支持"},
]
},
{
"id": "F3", "text": "你对'好工作'的核心定义是?(选最重要的1~2个)",
"type": "multiple",
"options": [
{"value": "A", "label": "收入高"},
{"value": "B", "label": "稳定(不容易失业)"},
{"value": "C", "label": "天恒做得开心、有成就感"},
{"value": "D", "label": "有社会地位、体面"},
{"value": "E", "label": "有成长空间,能不断提升"},
]
},
{
"id": "F4", "text": "如果中外合作办学(学费4~8万/年)是找到好专业的最佳途径,你支持吗?",
"type": "single",
"options": [
{"value": "A", "label": "支持,教育投资值得"},
{"value": "B", "label": "可以考虑,但要看具体项目和回报"},
{"value": "C", "label": "经济压力大,尽量不选"},
]
},
{
"id": "F5", "text": "你认为天恒最大的优势是什么?(选1~2个)",
"type": "multiple",
"options": [
{"value": "A", "label": "创造力强,有艺术感觉"},
{"value": "B", "label": "社交能力强,能搞定人际关系"},
{"value": "C", "label": "动手实践能力强"},
{"value": "D", "label": "逻辑思维好,数理基础扎实"},
{"value": "E", "label": "有主见,知道自己要什么"},
{"value": "F", "label": "适应能力强,什么环境都能活"},
]
},
{
"id": "F6", "text": "你最担心天恒大学生涯可能出什么问题?",
"type": "single",
"options": [
{"value": "A", "label": "对专业失去兴趣,混日子"},
{"value": "B", "label": "沉迷游戏或其他娱乐,荒废学业"},
{"value": "C", "label": "社交孤立或不适应集体生活"},
{"value": "D", "label": "毕业找不到工作"},
{"value": "E", "label": "不太担心,相信他能搞定"},
]
},
{
"id": "F7", "text": "志愿填报时,你认为最终决定权应该?",
"type": "single",
"options": [
{"value": "A", "label": "天恒自己决定,父母只提供信息"},
{"value": "B", "label": "全家协商,共同决策"},
{"value": "C", "label": "父母有最终否决权"},
]
},
{
"id": "F8", "text": "用一句话描述你对天恒大学四年的期望:",
"type": "text",
"placeholder": "请输入你的期望...",
},
]
# ---------- 插入数据 ----------
questionnaires = [
{
"title": "综合兴趣和偏好问卷",
"description": "合并了职业兴趣体验、性格行为模式和院校偏好三大板块,一份问卷全面了解天恒的个人画像。含3个分区共31题,完成时间约15分钟。",
"questions": json.dumps(merged_qs, ensure_ascii=False),
"target_user": "天恒"
},
{
"title": "家庭期望对齐问卷",
"description": "请每位家庭成员独立填写,表达你对天恒大学生涯的真实想法。去掉预设的专业立场,只聊最真实的期望。完成后可以查看汇总,发现家人之间的共同点和差异点。",
"questions": json.dumps(family_qs, ensure_ascii=False),
"target_user": "父母"
},
]
for q in questionnaires:
conn.execute(
"INSERT INTO questionnaires (title, description, questions, target_user) VALUES (?, ?, ?, ?)",
(q["title"], q["description"], q["questions"], q["target_user"])
)
conn.commit()
conn.close()
print(f"[seed] 已初始化 {len(questionnaires)} 份开放式问卷")
if __name__ == "__main__":
seed()