import os import mysql.connector from dotenv import load_dotenv load_dotenv() # 默认加载当前目录或父目录中的 .env 文件 # ============================================================ # 第一步:建立数据库连接 # ============================================================ # 使用环境变量管理敏感信息,这是生产级代码的基本规范 conn = mysql.connector.connect( host=os.getenv("DB_HOST", "127.0.0.1"), port=int(os.getenv("DB_PORT", 3307)), user=os.getenv("DB_USER", "root"), password=os.getenv("DB_PASSWORD", ""), database=os.getenv("DB_NAME", "analytics_demo"), ) cursor = conn.cursor() # ============================================================ # 第二步:创建表结构 # ============================================================ # 员工表:存储公司内部人员信息 # 用于分析:部门人数分布、薪资结构、入职趋势等 cursor.execute(""" CREATE TABLE IF NOT EXISTS employees ( id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主键 name VARCHAR(50) NOT NULL, -- 姓名 department VARCHAR(50) NOT NULL, -- 所属部门 salary DECIMAL(10,2) NOT NULL, -- 月薪(精确到分) hire_date DATE -- 入职日期 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; """) # 产品表:存储在售商品信息 # 用于分析:品类销售、价格分布、库存预警等 cursor.execute(""" CREATE TABLE IF NOT EXISTS products ( id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主键 product_name VARCHAR(100) NOT NULL, -- 商品名称 category VARCHAR(50) NOT NULL, -- 商品分类 price DECIMAL(10,2) NOT NULL, -- 单价 stock INT DEFAULT 0 -- 当前库存量 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; """) # 订单表:记录每笔交易 # 用于分析:销售趋势、员工绩效、产品热度等 cursor.execute(""" CREATE TABLE IF NOT EXISTS orders ( id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主键 employee_id INT NOT NULL, -- 下单员工(外键) product_id INT NOT NULL, -- 购买商品(外键) quantity INT NOT NULL, -- 购买数量 order_date DATE NOT NULL, -- 下单日期 FOREIGN KEY (employee_id) REFERENCES employees(id), -- 关联员工表 FOREIGN KEY (product_id) REFERENCES products(id) -- 关联产品表 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; """) # ============================================================ # 第三步:插入演示数据 # ============================================================ # 员工数据:5 个员工,分属 3 个部门 employees_data = [ (1, "张三", "技术部", 20000.00, "2023-01-15"), (2, "李四", "销售部", 11000.00, "2023-02-20"), (3, "王五", "技术部", 16000.00, "2022-11-10"), (4, "赵六", "人力资源", 5000.00, "2023-03-01"), (5, "钱七", "销售部", 17000.00, "2022-12-05"), ] # 产品数据:4 款商品,覆盖 2 个品类 products_data = [ (1, "笔记本电脑", "电子产品", 6999.00, 500), (2, "机械键盘", "电子产品", 399.00, 1000), (3, "办公椅", "办公用品", 499.00, 300), (4, "显示器", "电子产品", 1200.00, 400), ] # 订单数据:5 笔订单,模拟真实购买行为 orders_data = [ (1, 1, 1, 2, "2024-01-15"), # 张三买了 2 台笔记本 (2, 2, 2, 15, "2024-01-16"), # 李四买了 15 个键盘 (3, 3, 1, 10, "2024-01-17"), # 王五买了 10 台笔记本 (4, 5, 3, 6, "2024-01-18"), # 钱七买了 6 把办公椅 (5, 2, 4, 5, "2024-01-19"), # 李四买了 5 台显示器 ] # executemany 批量插入,比逐条 insert 高效得多 cursor.executemany("INSERT IGNORE INTO employees VALUES (%s,%s,%s,%s,%s)", employees_data) cursor.executemany("INSERT IGNORE INTO products VALUES (%s,%s,%s,%s,%s)", products_data) cursor.executemany("INSERT IGNORE INTO orders VALUES (%s,%s,%s,%s,%s)", orders_data) conn.commit() conn.close() print("✅ 数据库初始化完成") print(" - employees 表:5 条员工记录") print(" - products 表:4 条产品记录") print(" - orders 表:5 条订单记录")