database_build.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. """
  2. 数据库初始化脚本:创建 analytics_demo 库和表结构,插入演示数据。
  3. 使用方式:python database_build.py
  4. """
  5. import mysql.connector
  6. from config import DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME
  7. def init_database():
  8. """创建数据库、表结构并插入演示数据。"""
  9. # 先连接 MySQL(不指定数据库),确保目标库存在
  10. conn = mysql.connector.connect(
  11. host=DB_HOST,
  12. port=int(DB_PORT),
  13. user=DB_USER,
  14. password=DB_PASSWORD,
  15. )
  16. cursor = conn.cursor()
  17. cursor.execute(f"CREATE DATABASE IF NOT EXISTS {DB_NAME} DEFAULT CHARSET utf8mb4")
  18. conn.database = DB_NAME
  19. # ---- 建表 ----
  20. cursor.execute("""
  21. CREATE TABLE IF NOT EXISTS employees (
  22. id INT PRIMARY KEY AUTO_INCREMENT,
  23. name VARCHAR(50) NOT NULL,
  24. department VARCHAR(50) NOT NULL,
  25. salary DECIMAL(10,2) NOT NULL,
  26. hire_date DATE
  27. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  28. """)
  29. cursor.execute("""
  30. CREATE TABLE IF NOT EXISTS products (
  31. id INT PRIMARY KEY AUTO_INCREMENT,
  32. product_name VARCHAR(100) NOT NULL,
  33. category VARCHAR(50) NOT NULL,
  34. price DECIMAL(10,2) NOT NULL,
  35. stock INT DEFAULT 0
  36. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  37. """)
  38. cursor.execute("""
  39. CREATE TABLE IF NOT EXISTS orders (
  40. id INT PRIMARY KEY AUTO_INCREMENT,
  41. employee_id INT NOT NULL,
  42. product_id INT NOT NULL,
  43. quantity INT NOT NULL,
  44. order_date DATE NOT NULL,
  45. FOREIGN KEY (employee_id) REFERENCES employees(id),
  46. FOREIGN KEY (product_id) REFERENCES products(id)
  47. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  48. """)
  49. # ---- 插入演示数据 ----
  50. employees_data = [
  51. (1, "张三", "技术部", 20000.00, "2023-01-15"),
  52. (2, "李四", "销售部", 11000.00, "2023-02-20"),
  53. (3, "王五", "技术部", 16000.00, "2022-11-10"),
  54. (4, "赵六", "人力资源", 5000.00, "2023-03-01"),
  55. (5, "钱七", "销售部", 17000.00, "2022-12-05"),
  56. ]
  57. products_data = [
  58. (1, "笔记本电脑", "电子产品", 6999.00, 500),
  59. (2, "机械键盘", "电子产品", 399.00, 1000),
  60. (3, "办公椅", "办公用品", 499.00, 300),
  61. (4, "显示器", "电子产品", 1200.00, 400),
  62. ]
  63. orders_data = [
  64. (1, 1, 1, 2, "2024-01-15"),
  65. (2, 2, 2, 15, "2024-01-16"),
  66. (3, 3, 1, 10, "2024-01-17"),
  67. (4, 5, 3, 6, "2024-01-18"),
  68. (5, 2, 4, 5, "2024-01-19"),
  69. ]
  70. cursor.executemany("INSERT IGNORE INTO employees VALUES (%s,%s,%s,%s,%s)", employees_data)
  71. cursor.executemany("INSERT IGNORE INTO products VALUES (%s,%s,%s,%s,%s)", products_data)
  72. cursor.executemany("INSERT IGNORE INTO orders VALUES (%s,%s,%s,%s,%s)", orders_data)
  73. conn.commit()
  74. conn.close()
  75. print("✅ 数据库初始化完成")
  76. print(" - employees 表:5 条员工记录")
  77. print(" - products 表:4 条产品记录")
  78. print(" - orders 表:5 条订单记录")
  79. if __name__ == "__main__":
  80. init_database()