generate_minute_sql.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import pandas as pd
  2. from sqlalchemy import create_engine
  3. def get_engine():
  4. username = 'envision'
  5. password = 'envision'
  6. host = '172.21.6.37'
  7. port = 3306
  8. dbname = 'envision'
  9. return create_engine(f'mysql+pymysql://{username}:{password}@{host}:{port}/{dbname}')
  10. def generate_sql(df: pd.DataFrame, wind_name: str):
  11. print(f"开始执行{wind_name}")
  12. wind_nos = df['风机号'].unique()
  13. all_sqls = list()
  14. begin_time_str = '2025-01-01 00:00:00'
  15. end_time_str = '2025-03-01 00:00:00'
  16. for wind_no in wind_nos:
  17. wind_sqls = []
  18. index = 0
  19. stander_cols = list()
  20. stander_cols.append('wind_factory')
  21. stander_cols.append('wind_no')
  22. stander_cols.append('occur_time')
  23. wind_df = df[df['风机号'] == wind_no]
  24. for wind_factory, table, col, en_name in zip(wind_df['风场'], wind_df['历史采样表名'], wind_df['历史采样域名'],
  25. wind_df['en_name']):
  26. stander_cols.append(en_name)
  27. if index == 0:
  28. wind_sqls.append(
  29. f"select * from (select '{wind_factory}' as wind_factory,{wind_no} as wind_no, occur_time, {col} as {en_name}"
  30. f" from {table} where occur_time >= '{begin_time_str}' and occur_time <'{end_time_str}') a{index}")
  31. index = index + 1
  32. else:
  33. wind_sqls.append(
  34. f"\n inner join "
  35. f"(select '{wind_factory}' as wind_factory,{wind_no} as wind_no, occur_time, {col} as {en_name}"
  36. f" from {table} where occur_time >= '{begin_time_str}' and occur_time <'{end_time_str}') a{index} "
  37. f"on a{index - 1}.wind_factory = a{index}.wind_factory and a{index - 1}.wind_no = a{index}.wind_no"
  38. f" and a{index - 1}.occur_time = a{index}.occur_time")
  39. index = index + 1
  40. result_sql = "".join(wind_sqls) + ";"
  41. stander_cols_str = "'" + "',".join(stander_cols) + "'"
  42. all_sqls.append((result_sql, stander_cols_str))
  43. return all_sqls
  44. def show_sqls(stander_cols_str, datas):
  45. for index, data in enumerate(datas):
  46. print(f'String [] cols = {"".join(stander_cols_str[index])}')
  47. print()
  48. print(data)
  49. print()
  50. def save_to_csv(datas, name):
  51. dfs = list()
  52. for data in datas:
  53. dfs.append(pd.read_sql(data, get_engine()))
  54. df = pd.concat(dfs, ignore_index=True)
  55. df.to_csv(name + ".csv", encoding='utf8', index=False)
  56. if __name__ == '__main__':
  57. df = pd.read_csv(r"C:\Users\wzl\Desktop\中广核104测点\min_tables.csv")
  58. datas = generate_sql(df[df['风场'] == '右玉'], '右玉')
  59. show_sqls(datas[1], datas[0])
  60. # save_to_csv(datas[0], '右玉')