[大模型问数]实现大模型调用MYSQL(02)【MCP笔记】

发布于:2025-07-12 ⋅ 阅读:(18) ⋅ 点赞:(0)

文章结尾部分有CSDN官方提供的学长 联系方式名片
文章结尾部分有CSDN官方提供的学长 联系方式名片
关注B站,有好处!

本篇笔记完成数据模拟生成工作
目标:使用python模拟生成1000个学生数据、50个教师数据

1 首先创建数据库

在mysql 中创建数据库

create database mcp;

2 创建数据表

我们要创建的是学生信息和教师信息的表
教师表(ID、教工号、姓名、性别、学院、年龄)
学生表(ID、学号、姓名、性别、学院、年级、专业、班级、籍贯、年龄)

use mcp;

-- 创建教师表
CREATE TABLE teacher (
    ID INT AUTO_INCREMENT PRIMARY KEY COMMENT '教师唯一标识ID',
    job_number VARCHAR(20) NOT NULL UNIQUE COMMENT '教工号(唯一)',
    name VARCHAR(50) NOT NULL COMMENT '教师姓名',
    gender ENUM('男', '女') NOT NULL COMMENT '性别',
    college VARCHAR(100) NOT NULL COMMENT '所属学院',
    age TINYINT UNSIGNED COMMENT '年龄'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='教师信息表';

-- 创建学生表
CREATE TABLE student (
    ID INT AUTO_INCREMENT PRIMARY KEY COMMENT '学生唯一标识ID',
    student_id VARCHAR(20) NOT NULL UNIQUE COMMENT '学号(唯一)',
    name VARCHAR(50) NOT NULL COMMENT '学生姓名',
    gender ENUM('男', '女') NOT NULL COMMENT '性别',
    college VARCHAR(100) NOT NULL COMMENT '所属学院',
    grade VARCHAR(20) NOT NULL COMMENT '年级(如:2023级)',
    major VARCHAR(100) NOT NULL COMMENT '专业名称',
    class VARCHAR(50) NOT NULL COMMENT '班级(如:计算机1班)',
    hometown VARCHAR(100) COMMENT '籍贯',
    age TINYINT UNSIGNED COMMENT '年龄'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COMMENT='学生信息表';

3 创建python 工程

创建python工程student
配置一个虚拟环境,安装如下依赖:

pymysql
faker
mcp>=1.0.0
mysql-connector-python>=9.1.0

然后创建python文件gen_data.py

import pymysql
from faker import Faker
import random

# 初始化Faker生成器(中文环境)
fake = Faker('zh_CN')

# 数据库配置
db_config = {
    'host': 'localhost',
    'user': 'root',1111
    'password': 'xxxxxxx',
    'database': 'mcp',
    'charset': 'utf8mb3'
}

# 学院集合(教师和学生共享)
colleges = [
    "计算机科学与技术学院",
    "电子信息工程学院",
    "机械与汽车工程学院",
    "材料科学与工程学院",
    "生物与化学工程学院",
    "经济与管理学院",
    "外国语学院",
    "艺术学院",
    "法学院",
    "医学院"
]

# 学生专业映射(每个学院对应的专业)
major_mapping = {
    "计算机科学与技术学院": ["计算机科学与技术", "软件工程", "人工智能", "数据科学与大数据"],
    "电子信息工程学院": ["电子信息工程", "通信工程", "电子科学与技术"],
    "机械与汽车工程学院": ["机械工程", "车辆工程", "智能制造工程"],
    "材料科学与工程学院": ["材料科学与工程", "高分子材料工程"],
    "生物与化学工程学院": ["生物工程", "化学工程与工艺"],
    "经济与管理学院": ["经济学", "金融学", "工商管理", "会计学"],
    "外国语学院": ["英语", "日语", "法语", "翻译"],
    "艺术学院": ["视觉传达设计", "环境设计", "音乐表演"],
    "法学院": ["法学", "知识产权"],
    "医学院": ["临床医学", "护理学", "药学"]
}

# 籍贯省份列表
hometowns = ["北京", "上海", "广州", "深圳", "杭州", "南京", "武汉", "成都", "重庆", "西安",
             "天津", "苏州", "郑州", "长沙", "沈阳", "青岛", "合肥", "福州", "济南", "昆明"]


def generate_teachers(num=50):
    """生成随机教师数据"""
    teachers = []
    used_job_numbers = set()

    for _ in range(num):
        # 确保教工号唯一
        while True:
            job_number = "T" + str(random.randint(20000, 99999))
            if job_number not in used_job_numbers:
                used_job_numbers.add(job_number)
                break

        name = fake.name()
        gender = random.choice(["男", "女"])
        college = random.choice(colleges)
        age = random.randint(25, 65)  # 教师合理年龄范围

        teachers.append((job_number, name, gender, college, age))

    return teachers


def generate_students(num=1000):
    """生成随机学生数据"""
    students = []
    used_student_ids = set()
    grades = ["2020级", "2021级", "2022级", "2023级"]

    for _ in range(num):
        # 确保学号唯一
        while True:
            student_id = str(random.randint(20200001, 20209999))
            if student_id not in used_student_ids:
                used_student_ids.add(student_id)
                break

        name = fake.name()
        gender = random.choice(["男", "女"])
        college = random.choice(colleges)
        grade = random.choice(grades)
        # 根据学院选择对应专业
        major = random.choice(major_mapping[college])
        class_num = str(random.randint(1, 10)) + "班"
        hometown = random.choice(hometowns)
        # 根据年级计算合理年龄范围
        base_age = 18 + (2023 - int(grade[:4]))
        age = random.randint(base_age, base_age + 2)

        students.append((student_id, name, gender, college, grade, major, class_num, hometown, age))

    return students


def insert_data_to_db():
    """连接数据库并插入数据"""
    try:
        # 连接数据库
        connection = pymysql.connect(**db_config)
        cursor = connection.cursor()

        print("正在生成教师数据...")
        teachers = generate_teachers(50)
        teacher_sql = """
        INSERT INTO teacher (job_number, name, gender, college, age) 
        VALUES (%s, %s, %s, %s, %s)
        """
        cursor.executemany(teacher_sql, teachers)
        print(f"已插入 {len(teachers)} 条教师记录")

        print("正在生成学生数据...")
        students = generate_students(1000)
        student_sql = """
        INSERT INTO student (student_id, name, gender, college, grade, major, class, hometown, age) 
        VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
        """
        cursor.executemany(student_sql, students)
        print(f"已插入 {len(students)} 条学生记录")

        # 提交事务
        connection.commit()
        print("数据插入成功!")

    except pymysql.Error as e:
        print(f"数据库错误: {e}")
        connection.rollback()
    finally:
        if connection:
            connection.close()
            print("数据库连接已关闭")


if __name__ == "__main__":
    insert_data_to_db()

利用python代码生成数据成功


网站公告

今日签到

点亮在社区的每一天
去签到