demo_tool_for_goods.py 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. # -*- codeing = utf-8 -*-
  2. # @Time : 2023/12/5 16:18
  3. # @Author : Clown
  4. # @File : demo_tool_for_goods.py
  5. # @Software : PyCharm
  6. import pymysql
  7. from datetime import timedelta, datetime
  8. from dateutil.parser import parse
  9. import time
  10. import os
  11. import pandas as pd
  12. import json
  13. import hashlib
  14. import traceback
  15. #连接数据库
  16. def linkTomySql(host,port,passwd,db_name):
  17. '''连接至数据库返回【db】,v2新增local_infile=1 打开文件导入权限'''
  18. try:
  19. #本地连接为:localhost 服务器连接为:124.222.188.59
  20. db = pymysql.connect(
  21. host=host, user="root",
  22. passwd=passwd,
  23. db=db_name,
  24. charset='utf8mb4',
  25. local_infile=1,
  26. port=port)
  27. print('\nconnect to mysql server 成功')
  28. print('------------------------------------')
  29. except:
  30. print("\ncould not connect to mysql server")
  31. db = "连接失败"
  32. return db
  33. def selectDataByYearMonth(db,ym_list,out_excel_path):
  34. df_out = pd.DataFrame(columns = ['年月','品牌','省份','城市','菜单','销量'])
  35. for ym in ym_list:
  36. s = time.time()
  37. cursor = db.cursor()
  38. sql = f'''SELECT DATE_FORMAT(STR_TO_DATE(`日期`, '%Y%m%d'), '%Y%m') AS `年月`,`品牌`,`省`,`城市`,`类别` AS `菜单`,SUM(销量) AS `销量` FROM daily_sales_data_2rd WHERE 日期 LIKE '{ym}%' GROUP BY DATE_FORMAT(STR_TO_DATE(`日期`, '%Y%m%d'), '%Y%m'),`品牌`,`省`,`城市`,`类别` ORDER BY `销量` DESC;'''
  39. cursor.execute(sql)
  40. results = cursor.fetchall()
  41. value_out_list = pd.DataFrame(results,columns = ['年月','品牌','省份','城市','菜单','销量'])
  42. cursor.close()
  43. df_out = pd.concat([df_out, value_out_list])
  44. print(f'{ym} done t:{int(time.time()-s)}s')
  45. df_out.to_excel(out_excel_path, index = False)
  46. def selectDataByKeyWords(db,kw_list,out_excel_path):
  47. df_out = pd.DataFrame(columns = ['日期', '门店id', '关键词', '销量', '省', '城市', '门店名称'])
  48. for kw in kw_list:
  49. s = time.time()
  50. cursor = db.cursor()
  51. sql = f'''SELECT t2.*,t1.省,t1.城市,t1.门店名称 FROM
  52. (SELECT * FROM temp_daily_shops_goods_sales_map_kw_{kw} WHERE dateNo >= '2023-11-01' AND dateNo <= '2023-11-30')t2
  53. LEFT JOIN
  54. (select 平台, 门店名称, 客户id, 门店id+0 AS 门店id, 省, 城市 from shop_daily_operation_data_app_all where `有效单量` > 0 and `日期` >= '2023-01-01'
  55. AND `日期` <= '2023-11-30' group by 客户id, 门店id, 省, 城市, 平台, 门店名称)t1
  56. ON t2.shopId = t1.门店id;'''
  57. cursor.execute(sql)
  58. results = cursor.fetchall()
  59. value_out_list = pd.DataFrame(results, columns = ['日期', '门店id', '关键词', '销量', '省', '城市', '门店名称'])
  60. cursor.close()
  61. df_out = pd.concat([df_out, value_out_list])
  62. print(f'{kw} done t:{int(time.time() - s)}s')
  63. df_out.to_excel(out_excel_path, index = False)
  64. if __name__ == '__main__':
  65. s = time.time()
  66. if 1 == 0:
  67. host = 'localhost'
  68. port = 3306
  69. passwd = '111???clown'
  70. db_name = 'hexingxing'
  71. db = linkTomySql(host, port, passwd, db_name)
  72. ym_list = [202301]
  73. ym_list = [202101,202102,202103,202104,202105,202106,202107,202108,202109,202110,202111,202112,
  74. 202201,202202,202203,202204,202205,202206,202207,202208,202209,202210,202211,202212,
  75. 202301,202302,202303,202304,202305,202306,202307,202308,202309,202310,202311]
  76. out_excel_path = '省市年月菜单销量.xlsx'
  77. selectDataByYearMonth(db, ym_list, out_excel_path)
  78. if 1==1:
  79. host = '192.168.110.96'
  80. port = 3306
  81. passwd = '111???clown'
  82. db_name = 'jxb-h'
  83. db = linkTomySql(host, port, passwd, db_name)
  84. kw_list = ['大圆碗','肠粉粉','肠粉酱','蛋饼调味酱','豆花调味汁','豆浆碗','热干面调味酱']
  85. out_excel_path = '省市门店11月菜单对应供应品销量.xlsx'
  86. selectDataByKeyWords(db, kw_list, out_excel_path)
  87. db.close()
  88. print(f'total t:{int((time.time()-s)/60)}min')