mock_data_to_database.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #!/usr/bin/env python
  2. # -*- encoding: utf-8 -*-
  3. '''
  4. @filename : mock_data_to_database.py
  5. @description : 将mock数据写入到数据库中
  6. @time : 2025/01/31/00
  7. @author : Sherlock1011 & Min1027
  8. @Version : 1.0
  9. '''
  10. from dao.mysql_client import Mysql
  11. import pandas as pd
  12. from sqlalchemy import Column, Integer, VARCHAR, Float, DECIMAL
  13. from sqlalchemy.ext.declarative import declarative_base
  14. # 定义数据库表结构
  15. Base = declarative_base()
  16. class MockOrder(Base):
  17. __tablename__ = "mock_order"
  18. id = Column(Integer, primary_key=True, autoincrement=True) # 添加主键列
  19. BB_RETAIL_CUSTOMER_CODE = Column(VARCHAR(50))
  20. PRODUCT_CODE = Column(VARCHAR(50))
  21. MONTH6_SALE_QTY = Column(DECIMAL(18, 6))
  22. MONTH6_SALE_AMT = Column(DECIMAL(18, 6))
  23. MONTH6_GROSS_PROFIT_RATE = Column(DECIMAL(18, 6))
  24. MONTH6_SALE_QTY_YOY = Column(DECIMAL(18, 6))
  25. MONTH6_SALE_QTY_MOM = Column(DECIMAL(18, 6))
  26. MONTH6_SALE_AMT_YOY = Column(DECIMAL(18, 6))
  27. MONTH6_SALE_AMT_MOM = Column(DECIMAL(18, 6))
  28. ORDER_FULLORDR_RATE = Column(DECIMAL(18, 6))
  29. CUSTOMER_REPURCHASE_RATE = Column(DECIMAL(18, 6))
  30. NEW_PRODUCT_ORDER_QTY_OCC = Column(DECIMAL(18, 6))
  31. LISTING_RATE = Column(DECIMAL(18, 6))
  32. OUT_STOCK_DAYS = Column(DECIMAL(18, 6))
  33. RETAIL_PRICE_INDEX = Column(DECIMAL(18, 6))
  34. def insert_data(db, data_path):
  35. df = pd.read_excel(data_path)
  36. session = db.create_session()
  37. try:
  38. df.columns = ['BB_RETAIL_CUSTOMER_CODE',
  39. 'PRODUCT_CODE',
  40. 'MONTH6_SALE_QTY',
  41. 'MONTH6_SALE_AMT',
  42. 'MONTH6_GROSS_PROFIT_RATE',
  43. 'MONTH6_SALE_QTY_YOY',
  44. 'MONTH6_SALE_QTY_MOM',
  45. 'MONTH6_SALE_AMT_YOY',
  46. 'MONTH6_SALE_AMT_MOM',
  47. 'ORDER_FULLORDR_RATE',
  48. 'CUSTOMER_REPURCHASE_RATE',
  49. 'NEW_PRODUCT_ORDER_QTY_OCC',
  50. 'LISTING_RATE',
  51. 'OUT_STOCK_DAYS',
  52. 'RETAIL_PRICE_INDEX',
  53. ] # 确保列名匹配
  54. session.bulk_insert_mappings(MockOrder, df.to_dict(orient='records'))
  55. session.commit()
  56. print("数据成功插入数据库")
  57. except Exception as e:
  58. session.rollback()
  59. print(f"插入数据时出错: {e}")
  60. finally:
  61. session.close()
  62. if __name__ == "__main__":
  63. data_path = "./data/order.xlsx"
  64. # 创建数据库链接
  65. db = Mysql()
  66. # 创建表(如果不存在)
  67. Base.metadata.create_all(db.engine)
  68. insert_data(db, data_path)
  69. db.closed()