160 lines
8.9 KiB
Python
160 lines
8.9 KiB
Python
from database import SessionLocal, engine, Base
|
|||
|
|
from datetime import date, datetime
|
||
|
|
|
||
|
|
|
||
|
|
from model.teachers import Teacher
|
||
|
|
from model.counselor import Counselor
|
||
|
|
from model.classes_model import Classes
|
||
|
|
from model.student_info import Student
|
||
|
|
from model.scores import Scores
|
||
|
|
from model.employments import Employments
|
||
|
|
|
||
|
|
# Base.metadata.drop_all(bind=engine)
|
||
|
|
# Base.metadata.create_all(bind=engine)
|
||
|
|
|
||
|
|
# 教师数据
|
||
|
|
teachers_data = [
|
||
|
|
{"t_name": "周凌云", "t_gender": "男", "t_phone": "13800000001", "t_subject": "python",
|
||
|
|
"t_created": date(2023, 1, 1), "t_delete": False},
|
||
|
|
{"t_name": "张显", "t_gender": "女", "t_phone": "2783263268242", "t_subject": "mysql",
|
||
|
|
"t_created": date(2023, 1, 1), "t_delete": False},
|
||
|
|
]
|
||
|
|
|
||
|
|
# 2. 顾问数据
|
||
|
|
counselors_data = [
|
||
|
|
{"name": "吴振玮", "c_time": date(2023, 1, 1), "c_de": False},
|
||
|
|
{"name": "孙波", "c_time": date(2023, 1, 1), "c_de": False},
|
||
|
|
]
|
||
|
|
|
||
|
|
# 班级数据
|
||
|
|
classes_data = [
|
||
|
|
{"class_name": "沃林0803班", "head_teacher_name": "周凌云", "counselor_name": "吴振玮", "create_time": date(2023, 1, 1), "class_delete": False},
|
||
|
|
{"class_name": "沃林0814班", "head_teacher_name": "张显", "counselor_name": "孙波", "create_time": date(2023, 1, 1), "class_delete": False},
|
||
|
|
{"class_name": "沃林0824班", "head_teacher_name": "周凌云", "counselor_name": "孙波", "create_time": date(2023, 1, 1), "class_delete": False},
|
||
|
|
]
|
||
|
|
|
||
|
|
# 学生数据
|
||
|
|
students_data = [
|
||
|
|
{"id": "2024001", "name": "张伟", "gender": "男", "class_name": "沃林0803班", "age": 22, "hometown": "北京",
|
||
|
|
"graduate_school": "北京四中", "major": "计算机科学与技术", "education": "本科",
|
||
|
|
"enrollment_date": date(2022, 9, 1), "graduation_date": date(2026, 6, 30), "status": "未就业", "is_deleted": False},
|
||
|
|
{"id": "2024002", "name": "王芳", "gender": "女", "class_name": "沃林0803班", "age": 23, "hometown": "上海",
|
||
|
|
"graduate_school": "上海中学", "major": "计算机科学与技术", "education": "硕士",
|
||
|
|
"enrollment_date": date(2022, 9, 1), "graduation_date": date(2026, 6, 30), "status": "在读", "is_deleted": False},
|
||
|
|
{"id": "2024003", "name": "李娜", "gender": "女", "class_name": "沃林0824班", "age": 24, "hometown": "广州",
|
||
|
|
"graduate_school": "华南师范大学附属中学", "major": "计算机科学与技术", "education": "本科",
|
||
|
|
"enrollment_date": date(2022, 9, 1), "graduation_date": date(2026, 6, 30), "status": "未就业", "is_deleted": False},
|
||
|
|
{"id": "2024004", "name": "刘洋", "gender": "男", "class_name": "沃林0824班", "age": 25, "hometown": "深圳",
|
||
|
|
"graduate_school": "深圳中学", "major": "计算机科学与技术", "education": "本科",
|
||
|
|
"enrollment_date": date(2022, 9, 1), "graduation_date": date(2026, 6, 30), "status": "已就业", "is_deleted": False},
|
||
|
|
{"id": "2024005", "name": "陈静", "gender": "女", "class_name": "沃林0803班", "age": 26, "hometown": "杭州",
|
||
|
|
"graduate_school": "杭州第二中学", "major": "软件工程", "education": "本科", "enrollment_date": date(2022, 9, 1),
|
||
|
|
"graduation_date": date(2026, 6, 30), "status": "在读", "is_deleted": False},
|
||
|
|
{"id": "2024006", "name": "杨强", "gender": "男", "class_name": "沃林0814班", "age": 27, "hometown": "成都",
|
||
|
|
"graduate_school": "成都七中", "major": "软件工程", "education": "本科", "enrollment_date": date(2022, 9, 1),
|
||
|
|
"graduation_date": date(2026, 6, 30), "status": "未就业", "is_deleted": False},
|
||
|
|
{"id": "2024007", "name": "赵敏", "gender": "女", "class_name": "沃林0803班", "age": 28, "hometown": "武汉",
|
||
|
|
"graduate_school": "武汉外国语学校", "major": "人工智能", "education": "硕士", "enrollment_date": date(2022, 9, 1),
|
||
|
|
"graduation_date": date(2026, 6, 30), "status": "已就业", "is_deleted": False},
|
||
|
|
{"id": "2024008", "name": "黄磊", "gender": "男", "class_name": "沃林0814班", "age": 29, "hometown": "南京",
|
||
|
|
"graduate_school": "南京师范大学附属中学", "major": "人工智能", "education": "本科",
|
||
|
|
"enrollment_date": date(2022, 9, 1), "graduation_date": date(2026, 6, 30), "status": "在读", "is_deleted": False},
|
||
|
|
{"id": "2024009", "name": "周杰", "gender": "男", "class_name": "沃林0824班", "age": 30, "hometown": "西安",
|
||
|
|
"graduate_school": "西安高新第一中学", "major": "网络工程", "education": "硕士",
|
||
|
|
"enrollment_date": date(2022, 9, 1), "graduation_date": date(2026, 6, 30), "status": "在读", "is_deleted": False},
|
||
|
|
{"id": "2024010", "name": "吴霞", "gender": "女", "class_name": "沃林0814班", "age": 31, "hometown": "重庆",
|
||
|
|
"graduate_school": "重庆巴蜀中学", "major": "网络工程", "education": "本科", "enrollment_date": date(2022, 9, 1),
|
||
|
|
"graduation_date": date(2026, 6, 30), "status": "已就业", "is_deleted": False},
|
||
|
|
]
|
||
|
|
|
||
|
|
# 5. 成绩数据
|
||
|
|
scores_data = [
|
||
|
|
{"id": "2024001", "exam_round": 1, "score": 85, "is_warning": False, "is_deleted": False},
|
||
|
|
{"id": "2024002", "exam_round": 1, "score": 55, "is_warning": True, "is_deleted": False},
|
||
|
|
{"id": "2024003", "exam_round": 1, "score": 92, "is_warning": False, "is_deleted": False},
|
||
|
|
{"id": "2024004", "exam_round": 1, "score": 78, "is_warning": False, "is_deleted": False},
|
||
|
|
{"id": "2024005", "exam_round": 1, "score": 45, "is_warning": True, "is_deleted": False},
|
||
|
|
]
|
||
|
|
|
||
|
|
#6. 就业数据
|
||
|
|
employments_data = [
|
||
|
|
{"id": "2024004", "offer_open": datetime(2026, 3, 1, 9, 0), "offer_review": datetime(2026, 3, 15, 14, 30), "emp": "腾讯科技", "sal": 25000.0, "is_deleted": False},
|
||
|
|
{"id": "2024007", "offer_open": datetime(2026, 2, 10, 10, 0), "offer_review": datetime(2026, 2, 20, 16, 0), "emp": "阿里巴巴", "sal": 30000.0, "is_deleted": False},
|
||
|
|
{"id": "2024010", "offer_open": datetime(2026, 4, 5, 9, 30), "offer_review": datetime(2026, 4, 12, 11, 0), "emp": "字节跳动", "sal": 28000.0, "is_deleted": False},
|
||
|
|
{"id": "2024001", "offer_open": datetime(2026, 5, 1, 9, 0), "offer_review": None, "emp": None, "sal": None, "is_deleted": False},
|
||
|
|
{"id": "2024002", "offer_open": None, "offer_review": None, "emp": None, "sal": None, "is_deleted": True},
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
def insert_data():
|
||
|
|
db = SessionLocal()
|
||
|
|
try:
|
||
|
|
# 插入教师
|
||
|
|
print("正在写入教师数据...")
|
||
|
|
for t in teachers_data:
|
||
|
|
if not db.query(Teacher).filter(Teacher.t_name == t["t_name"]).first():
|
||
|
|
db.add(Teacher(**t))
|
||
|
|
db.commit()
|
||
|
|
|
||
|
|
# 插入顾问 (Counselor)
|
||
|
|
print("正在写入顾问数据...")
|
||
|
|
for c in counselors_data:
|
||
|
|
if not db.query(Counselor).filter(Counselor.name == c["name"]).first():
|
||
|
|
db.add(Counselor(**c))
|
||
|
|
db.commit()
|
||
|
|
|
||
|
|
# 3. 插入班级 (Classes)
|
||
|
|
print("正在写入班级数据...")
|
||
|
|
for cl in classes_data:
|
||
|
|
if not db.query(Classes).filter(Classes.class_name == cl["class_name"]).first():
|
||
|
|
# 查找对应老师和顾问的自增 ID
|
||
|
|
t = db.query(Teacher).filter(Teacher.t_name == cl["head_teacher_name"]).first()
|
||
|
|
c = db.query(Counselor).filter(Counselor.name == cl["counselor_name"]).first()
|
||
|
|
if t and c:
|
||
|
|
# 注意:Classes模型有 teachers 多对多关系,这里我们只处理必需的 head_teacher_id 和 counselor_id
|
||
|
|
db.add(Classes(
|
||
|
|
class_name=cl["class_name"],
|
||
|
|
head_teacher_id=t.t_id,
|
||
|
|
counselor_id=c.id,
|
||
|
|
create_time=cl["create_time"],
|
||
|
|
class_delete=cl["class_delete"]
|
||
|
|
))
|
||
|
|
else:
|
||
|
|
print(f" 找不到班级 {cl['class_name']} 对应的老师或顾问,跳过!")
|
||
|
|
db.commit()
|
||
|
|
|
||
|
|
# --- 4. 插入学生 (Student) ---
|
||
|
|
print("正在写入学生数据...")
|
||
|
|
for s in students_data:
|
||
|
|
if not db.query(Student).filter(Student.id == s["id"]).first():
|
||
|
|
db.add(Student(**s))
|
||
|
|
db.commit()
|
||
|
|
|
||
|
|
# 5. 插入成绩 (Scores)
|
||
|
|
print("正在写入成绩数据...")
|
||
|
|
for sc in scores_data:
|
||
|
|
if not db.query(Scores).filter(Scores.id == sc["id"], Scores.exam_round == sc["exam_round"]).first():
|
||
|
|
db.add(Scores(**sc))
|
||
|
|
db.commit()
|
||
|
|
|
||
|
|
# 6. 插入就业信息 (Employments)
|
||
|
|
print("正在写入就业数据...")
|
||
|
|
for emp in employments_data:
|
||
|
|
if not db.query(Employments).filter(Employments.id == emp["id"]).first():
|
||
|
|
db.add(Employments(**emp))
|
||
|
|
db.commit()
|
||
|
|
|
||
|
|
# 最终统计
|
||
|
|
print(f"\n 数据初始化完成!")
|
||
|
|
print(f"班级: {db.query(Classes).count()} 个 | 学生: {db.query(Student).count()} 名")
|
||
|
|
print(f"成绩: {db.query(Scores).count()} 条 | 就业: {db.query(Employments).count()} 条")
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
db.rollback()
|
||
|
|
print(f"\n 插入失败,已回滚:{e}")
|
||
|
|
finally:
|
||
|
|
db.close()
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
insert_data()
|