stock_processor.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import pandas as pd
  2. import pymysql
  3. def get_stock_data(table_name, db_config):
  4. """
  5. 从数据库中读取指定股票的数据并进行格式转换和清洗。
  6. :param table_name: 数据表名称
  7. :param db_config: 数据库配置信息,包含 host, port, user, password, database
  8. :return: 清洗后的 Pandas DataFrame
  9. """
  10. try:
  11. # 连接数据库
  12. connection = pymysql.connect(
  13. host=db_config['host'],
  14. port=db_config['port'],
  15. user=db_config['user'],
  16. password=db_config['password'],
  17. database=db_config['database']
  18. )
  19. print(f"开始读取表:{table_name}")
  20. # 查询数据
  21. query = f"SELECT time, open_back, high_back, low_back, close_back, volume_back FROM `{table_name}`"
  22. df = pd.read_sql(query, connection) # 读取数据到 DataFrame,注意数据库连接方式
  23. connection.close()
  24. if df.empty:
  25. print(f"{table_name} 数据为空")
  26. return pd.DataFrame()
  27. # 格式转换和清洗
  28. df.rename(columns={
  29. 'time': 'Date',
  30. 'high_back': 'High',
  31. 'low_back': 'Low',
  32. 'open_back': 'Open',
  33. 'close_back': 'Close',
  34. 'volume_back': 'Volume'
  35. }, inplace=True)
  36. df['Date'] = pd.to_datetime(df['Date'])
  37. print(f"完成数据清洗:{table_name}")
  38. print(df.head())
  39. return df
  40. except Exception as e:
  41. print(f"读取 {table_name} 数据失败:{e}")
  42. return pd.DataFrame()