mdbq 3.0.7__tar.gz → 3.0.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. {mdbq-3.0.7 → mdbq-3.0.9}/PKG-INFO +1 -1
  2. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/aggregation/aggregation.py +27 -36
  3. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/aggregation/query_data.py +151 -61
  4. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/mysql/mysql.py +12 -5
  5. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq.egg-info/PKG-INFO +1 -1
  6. {mdbq-3.0.7 → mdbq-3.0.9}/setup.py +1 -1
  7. {mdbq-3.0.7 → mdbq-3.0.9}/README.txt +0 -0
  8. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/__init__.py +0 -0
  9. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/__version__.py +0 -0
  10. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/aggregation/__init__.py +0 -0
  11. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/aggregation/df_types.py +0 -0
  12. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/aggregation/mysql_types.py +0 -0
  13. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/aggregation/optimize_data.py +0 -0
  14. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/aggregation/query_data_bak.py +0 -0
  15. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/bdup/__init__.py +0 -0
  16. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/bdup/bdup.py +0 -0
  17. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/clean/__init__.py +0 -0
  18. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/clean/clean_upload.py +0 -0
  19. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/clean/data_clean.py +0 -0
  20. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/company/__init__.py +0 -0
  21. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/company/copysh.py +0 -0
  22. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/config/__init__.py +0 -0
  23. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/config/get_myconf.py +0 -0
  24. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/config/myconfig.py +0 -0
  25. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/config/products.py +0 -0
  26. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/config/set_support.py +0 -0
  27. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/config/update_conf.py +0 -0
  28. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/dataframe/__init__.py +0 -0
  29. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/dataframe/converter.py +0 -0
  30. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/log/__init__.py +0 -0
  31. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/log/mylogger.py +0 -0
  32. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/mongo/__init__.py +0 -0
  33. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/mongo/mongo.py +0 -0
  34. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/mysql/__init__.py +0 -0
  35. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/mysql/recheck_mysql.py +0 -0
  36. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/mysql/s_query.py +0 -0
  37. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/mysql/year_month_day.py +0 -0
  38. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/other/__init__.py +0 -0
  39. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/other/porxy.py +0 -0
  40. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/other/pov_city.py +0 -0
  41. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/other/sku_picture.py +0 -0
  42. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/other/ua_sj.py +0 -0
  43. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/pbix/__init__.py +0 -0
  44. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/pbix/pbix_refresh.py +0 -0
  45. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/pbix/refresh_all.py +0 -0
  46. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/pbix/refresh_all_old.py +0 -0
  47. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/req_post/__init__.py +0 -0
  48. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/req_post/req_tb.py +0 -0
  49. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/spider/__init__.py +0 -0
  50. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq/spider/aikucun.py +0 -0
  51. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq.egg-info/SOURCES.txt +0 -0
  52. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq.egg-info/dependency_links.txt +0 -0
  53. {mdbq-3.0.7 → mdbq-3.0.9}/mdbq.egg-info/top_level.txt +0 -0
  54. {mdbq-3.0.7 → mdbq-3.0.9}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 3.0.7
3
+ Version: 3.0.9
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1192,52 +1192,43 @@ def one_file_to_mysql(file, db_name, table_name):
1192
1192
  print(f'{os.path.splitext(os.path.basename(__file__))[0]}.one_file_to_mysql: 函数只接受文件, 此文件不存在: {file}')
1193
1193
  return
1194
1194
  filename = os.path.basename(file)
1195
- df = pd.read_csv(file, encoding='utf-8_sig', header=0, na_filter=False, float_precision='high')
1195
+ if file.endswith('.xlsx'):
1196
+ df = pd.read_excel(file)
1197
+ else:
1198
+ df = pd.read_csv(file, encoding='utf-8_sig', header=0, na_filter=False, float_precision='high')
1196
1199
  # df.replace(to_replace=[','], value='', regex=True, inplace=True) # 替换掉特殊字符
1197
1200
  m = mysql.MysqlUpload(username=username, password=password, host=host, port=port)
1198
1201
  m.df_to_mysql(
1199
1202
  df=df,
1200
1203
  db_name=db_name,
1201
1204
  table_name=table_name,
1202
- move_insert=False,
1203
- df_sql=True,
1204
- drop_duplicates=False,
1205
+ # icm_update=['sku_id'], # 增量更新, 在聚合数据中使用,其他不要用
1206
+ move_insert=False, # 先删除,再插入
1207
+ df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
1208
+ drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
1205
1209
  count=None,
1206
- filename=filename,
1210
+ filename=None, # 用来追踪处理进度
1211
+ # reset_id=False, # 是否重置自增列
1212
+ # set_typ=set_typ,
1207
1213
  )
1208
1214
 
1209
1215
 
1210
1216
  def test():
1211
- path = r'/Users/xigua/数据中心/原始文件3/达摩盘/dmp人群报表'
1217
+ path = r'/Users/xigua/Downloads/京准通'
1218
+
1212
1219
 
1213
- results = []
1214
1220
  for root, dirs, files in os.walk(path, topdown=False):
1215
1221
  for name in files:
1216
1222
  if name.endswith('.csv') and 'baidu' not in name and '~' not in name:
1217
1223
  # df = pd.read_excel(os.path.join(root, name), header=0)
1218
1224
  df = pd.read_csv(os.path.join(root, name), encoding='utf-8_sig', header=0, na_filter=False)
1219
- results.append(df)
1225
+
1220
1226
  # print(name)
1221
1227
  if len(df) == 0:
1222
1228
  continue
1223
- if '达摩盘消耗占比' in df.columns.tolist():
1224
- df.pop('达摩盘消耗占比')
1225
- if '更新时间' not in df.columns.tolist():
1226
- print(name)
1227
- df['更新时间'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
1228
- # df.insert(loc=1, column='店铺名称', value='万里马官方旗舰店')
1229
- # df['更新时间'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
1230
- df.to_csv(os.path.join(root, name), encoding='utf-8_sig', index=False, header=True)
1231
- # for col in ['更新时间']:
1232
- # if col not in df.columns.tolist():
1233
- # print(name)
1234
- # df[col] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
1235
- # df.to_csv(os.path.join(root, name), encoding='utf-8_sig', index=False, header=True)
1236
- # pattern = re.findall(r'\d{4}-\d{2}-\d{2}_\d{4}-\d{2}-\d{2}', name)[0]
1237
- # new_name = f'py_xg_店铺销售指标_万里马官方旗舰店_{pattern}.csv'
1238
- # df.to_csv(os.path.join(root, name), encoding='utf-8_sig', index=False, header=True)
1239
- # os.remove(os.path.join(root, name))
1240
- # results.append(df)
1229
+ df['类目ID'] = df['类目ID'].apply(lambda x: 0 if str(x) == 'null' else x)
1230
+ df['类目名称'] = df['类目ID'].apply(lambda x: 0 if str(x) == 'null' else x)
1231
+ df.to_csv(os.path.join(root, name), encoding='utf-8_sig', index=False, header=True)
1241
1232
 
1242
1233
 
1243
1234
  if __name__ == '__main__':
@@ -1246,21 +1237,21 @@ if __name__ == '__main__':
1246
1237
  # host = ''
1247
1238
  # port = ''
1248
1239
  #
1249
- # # 上传 1 个文件到数据库
1250
- # one_file_to_mysql(
1251
- # file=r'/Users/xigua/Downloads/DMP报表_2024-10-23_2024-10-29.csv',
1252
- # db_name='达摩盘3',
1253
- # table_name='dmp人群报表',
1254
- # )
1240
+ # 上传 1 个文件到数据库
1241
+ one_file_to_mysql(
1242
+ file=r'/Users/xigua/Downloads/批量SKU导出-批量任务.xlsx',
1243
+ db_name='属性设置3',
1244
+ table_name='京东商品属性',
1245
+ )
1255
1246
 
1256
- test()
1257
- # col = 0
1247
+ # test()
1248
+ # col = 1
1258
1249
  # if col:
1259
1250
  # # 上传一个目录到指定数据库
1260
1251
  # db_name = '京东数据3'
1261
- # table_name = '推广数据_全站营销'
1252
+ # table_name = '推广数据_京准通'
1262
1253
  # upload_dir(
1263
- # path=r'/Users/xigua/数据中心/原始文件3/京东报表/京准通_全站营销',
1254
+ # path=r'/Users/xigua/数据中心/原始文件3/京东报表/推广报表',
1264
1255
  # db_name=db_name,
1265
1256
  # collection_name=table_name,
1266
1257
  # )
@@ -111,8 +111,10 @@ class MysqlDatasQuery:
111
111
  '直接成交金额': 'float64',
112
112
  }, errors='raise')
113
113
  if is_maximize:
114
- df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '展现量', '点击量'], as_index=False).agg(
115
- **{'加购量': ('加购量', np.max),
114
+ df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '点击量'], as_index=False).agg(
115
+ **{
116
+ '展现量': ('展现量', np.max),
117
+ '加购量': ('加购量', np.max),
116
118
  '成交笔数': ('成交笔数', np.max),
117
119
  '成交金额': ('成交金额', np.max),
118
120
  '自然流量曝光量': ('自然流量曝光量', np.max),
@@ -121,8 +123,9 @@ class MysqlDatasQuery:
121
123
  }
122
124
  )
123
125
  else:
124
- df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '展现量', '点击量'], as_index=False).agg(
126
+ df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '点击量'], as_index=False).agg(
125
127
  **{
128
+ '展现量': ('展现量', np.min),
126
129
  '加购量': ('加购量', np.min),
127
130
  '成交笔数': ('成交笔数', np.min),
128
131
  '成交金额': ('成交金额', np.min),
@@ -131,6 +134,7 @@ class MysqlDatasQuery:
131
134
  '直接成交金额': ('直接成交金额', np.max)
132
135
  }
133
136
  )
137
+ df.to_csv('/Users/xigua/Downloads/zhuti.csv', index=False, header=True, encoding='utf-8_sig')
134
138
  df.insert(loc=1, column='推广渠道', value='万相台无界版') # df中插入新列
135
139
  set_typ = {
136
140
  '日期': 'date',
@@ -259,13 +263,14 @@ class MysqlDatasQuery:
259
263
  )
260
264
  df['宝贝id'] = df['宝贝id'].astype(str)
261
265
  df = df.groupby(['日期', '店铺名称', '宝贝id', '行业类目'], as_index=False).agg(
262
- **{'销售额': ('销售额', np.min),
263
- '销售量': ('销售量', np.min),
264
- '订单数': ('订单数', np.min),
265
- '退货量': ('退货量', np.max),
266
- '退款额': ('退款额', np.max),
267
- '退款额_发货后': ('退款额_发货后', np.max),
268
- '退货量_发货后': ('退货量_发货后', np.max),
266
+ **{
267
+ '销售额': ('销售额', np.min),
268
+ '销售量': ('销售量', np.min),
269
+ '订单数': ('订单数', np.min),
270
+ '退货量': ('退货量', np.max),
271
+ '退款额': ('退款额', np.max),
272
+ '退款额_发货后': ('退款额_发货后', np.max),
273
+ '退货量_发货后': ('退货量_发货后', np.max),
269
274
  }
270
275
  )
271
276
  df['件均价'] = df.apply(lambda x: x['销售额'] / x['销售量'] if x['销售量'] > 0 else 0, axis=1).round(
@@ -366,19 +371,22 @@ class MysqlDatasQuery:
366
371
  '直接成交金额': 'float64',
367
372
  }, errors='raise')
368
373
  if is_maximize:
369
- df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '展现量', '点击量', '人群名字'],
374
+ df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '点击量', '人群名字'],
370
375
  as_index=False).agg(
371
- **{'加购量': ('加购量', np.max),
372
- '成交笔数': ('成交笔数', np.max),
373
- '成交金额': ('成交金额', np.max),
374
- '直接成交笔数': ('直接成交笔数', np.max),
375
- '直接成交金额': ('直接成交金额', np.max)
376
- }
376
+ **{
377
+ '展现量': ('展现量', np.max),
378
+ '加购量': ('加购量', np.max),
379
+ '成交笔数': ('成交笔数', np.max),
380
+ '成交金额': ('成交金额', np.max),
381
+ '直接成交笔数': ('直接成交笔数', np.max),
382
+ '直接成交金额': ('直接成交金额', np.max)
383
+ }
377
384
  )
378
385
  else:
379
- df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '展现量', '点击量', '人群名字'],
386
+ df = df.groupby(['日期', '店铺名称', '营销场景', '商品id', '花费', '点击量', '人群名字'],
380
387
  as_index=False).agg(
381
388
  **{
389
+ '展现量': ('展现量', np.min),
382
390
  '加购量': ('加购量', np.min),
383
391
  '成交笔数': ('成交笔数', np.min),
384
392
  '成交金额': ('成交金额', np.min),
@@ -552,20 +560,23 @@ class MysqlDatasQuery:
552
560
  }, errors='raise')
553
561
  if is_maximize:
554
562
  df = df.groupby(
555
- ['日期', '店铺名称', '营销场景', '商品id', '词类型', '词名字_词包名字', '花费', '展现量', '点击量'],
563
+ ['日期', '店铺名称', '营销场景', '商品id', '词类型', '词名字_词包名字', '花费', '点击量'],
556
564
  as_index=False).agg(
557
- **{'加购量': ('加购量', np.max),
558
- '成交笔数': ('成交笔数', np.max),
559
- '成交金额': ('成交金额', np.max),
560
- '直接成交笔数': ('直接成交笔数', np.max),
561
- '直接成交金额': ('直接成交金额', np.max)
562
- }
565
+ **{
566
+ '展现量': ('展现量', np.max),
567
+ '加购量': ('加购量', np.max),
568
+ '成交笔数': ('成交笔数', np.max),
569
+ '成交金额': ('成交金额', np.max),
570
+ '直接成交笔数': ('直接成交笔数', np.max),
571
+ '直接成交金额': ('直接成交金额', np.max)
572
+ }
563
573
  )
564
574
  else:
565
575
  df = df.groupby(
566
- ['日期', '店铺名称', '营销场景', '商品id', '词类型', '词名字_词包名字', '花费', '展现量', '点击量'],
576
+ ['日期', '店铺名称', '营销场景', '商品id', '词类型', '词名字_词包名字', '花费', '点击量'],
567
577
  as_index=False).agg(
568
578
  **{
579
+ '展现量': ('展现量', np.min),
569
580
  '加购量': ('加购量', np.min),
570
581
  '成交笔数': ('成交笔数', np.min),
571
582
  '成交金额': ('成交金额', np.min),
@@ -682,9 +693,10 @@ class MysqlDatasQuery:
682
693
  '观看次数': 'int64',
683
694
  }, errors='raise')
684
695
  if is_maximize:
685
- df = df.groupby(['日期', '店铺名称', '营销场景', '人群名字', '计划名字', '花费', '观看次数', '展现量'],
696
+ df = df.groupby(['日期', '店铺名称', '营销场景', '人群名字', '计划名字', '花费', '观看次数'],
686
697
  as_index=False).agg(
687
698
  **{
699
+ '展现量': ('展现量', np.max),
688
700
  '进店量': ('进店量', np.max),
689
701
  '粉丝关注量': ('粉丝关注量', np.max),
690
702
  '加购量': ('加购量', np.max),
@@ -695,9 +707,10 @@ class MysqlDatasQuery:
695
707
  }
696
708
  )
697
709
  else:
698
- df = df.groupby(['日期', '店铺名称', '营销场景', '人群名字', '计划名字', '花费', '观看次数', '展现量'],
710
+ df = df.groupby(['日期', '店铺名称', '营销场景', '人群名字', '计划名字', '花费', '观看次数'],
699
711
  as_index=False).agg(
700
712
  **{
713
+ '展现量': ('展现量', np.min),
701
714
  '进店量': ('进店量', np.min),
702
715
  '粉丝关注量': ('粉丝关注量', np.min),
703
716
  '加购量': ('加购量', np.min),
@@ -798,8 +811,9 @@ class MysqlDatasQuery:
798
811
  '品牌搜索人数': 'int64',
799
812
  }, errors='raise')
800
813
  if is_maximize:
801
- df = df.groupby(['日期', '店铺名称', '报表类型', '花费', '展现量', '点击量'], as_index=False).agg(
814
+ df = df.groupby(['日期', '店铺名称', '报表类型', '花费', '点击量'], as_index=False).agg(
802
815
  **{
816
+ '展现量': ('展现量', np.max),
803
817
  '加购量': ('加购量', np.max),
804
818
  '成交笔数': ('成交笔数', np.max),
805
819
  '成交金额': ('成交金额', np.max),
@@ -808,8 +822,9 @@ class MysqlDatasQuery:
808
822
  }
809
823
  )
810
824
  else:
811
- df = df.groupby(['日期', '店铺名称', '报表类型', '花费', '展现量', '点击量'], as_index=False).agg(
825
+ df = df.groupby(['日期', '店铺名称', '报表类型', '花费', '点击量'], as_index=False).agg(
812
826
  **{
827
+ '展现量': ('展现量', np.min),
813
828
  '加购量': ('加购量', np.min),
814
829
  '成交笔数': ('成交笔数', np.min),
815
830
  '成交金额': ('成交金额', np.min),
@@ -1105,7 +1120,7 @@ class MysqlDatasQuery:
1105
1120
  )
1106
1121
  return True
1107
1122
 
1108
- @try_except
1123
+ # @try_except
1109
1124
  def jdjzt(self, db_name='聚合数据', table_name='京东_京准通'):
1110
1125
  start_date, end_date = self.months_data(num=self.months)
1111
1126
  projection = {
@@ -1135,15 +1150,33 @@ class MysqlDatasQuery:
1135
1150
  df = df.groupby(
1136
1151
  ['日期', '店铺名称', '产品线', '触发sku_id', '跟单sku_id', 'spu_id', '花费', '展现数', '点击数'],
1137
1152
  as_index=False).agg(
1138
- **{'直接订单行': ('直接订单行', np.max),
1139
- '直接订单金额': ('直接订单金额', np.max),
1140
- '总订单行': ('总订单行', np.max),
1141
- '总订单金额': ('总订单金额', np.max),
1142
- '直接加购数': ('直接加购数', np.max),
1143
- '总加购数': ('总加购数', np.max),
1144
- }
1153
+ **{
1154
+ '直接订单行': ('直接订单行', np.max),
1155
+ '直接订单金额': ('直接订单金额', np.max),
1156
+ '总订单行': ('总订单行', np.max),
1157
+ '总订单金额': ('总订单金额', np.max),
1158
+ '直接加购数': ('直接加购数', np.max),
1159
+ '总加购数': ('总加购数', np.max),
1160
+ }
1145
1161
  )
1146
1162
  df = df[df['花费'] > 0]
1163
+ projection={
1164
+ 'sku_id': 1,
1165
+ 'spu_id': 1,
1166
+ }
1167
+ df_sku = self.download.data_to_df(
1168
+ db_name='属性设置3',
1169
+ table_name='京东商品属性',
1170
+ start_date=start_date,
1171
+ end_date=end_date,
1172
+ projection=projection,
1173
+ )
1174
+ df.pop('spu_id') # 删除推广表的 spu id
1175
+ df = pd.merge(df, df_sku, how='left', left_on='跟单sku_id', right_on='sku_id')
1176
+ df.pop('sku_id') # 删除聚合后合并进来的 sku id,实际使用 跟单sku_id
1177
+ p = df.pop('spu_id')
1178
+ df.insert(loc=3, column='spu_id', value=p)
1179
+
1147
1180
  self.pf_datas_jd.append(
1148
1181
  {
1149
1182
  '集合名称': table_name,
@@ -1187,6 +1220,42 @@ class MysqlDatasQuery:
1187
1220
  set_typ=set_typ,
1188
1221
 
1189
1222
  )
1223
+
1224
+ # # 按照 spu 聚合
1225
+ # df = df.groupby(
1226
+ # ['日期', '店铺名称', 'spu_id'],
1227
+ # as_index=False).agg(
1228
+ # **{
1229
+ # '花费': ('花费', np.sum),
1230
+ # '展现数': ('展现数', np.sum),
1231
+ # '点击数': ('点击数', np.sum),
1232
+ # '直接订单行': ('直接订单行', np.sum),
1233
+ # '直接订单金额': ('直接订单金额', np.sum),
1234
+ # '总订单行': ('总订单行', np.sum),
1235
+ # '总订单金额': ('总订单金额', np.sum),
1236
+ # '直接加购数': ('直接加购数', np.sum),
1237
+ # '总加购数': ('总加购数', np.sum),
1238
+ # }
1239
+ # )
1240
+ # min_date = df['日期'].min()
1241
+ # max_date = df['日期'].max()
1242
+ # now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
1243
+ # print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/京东_京准通_按spu -> {min_date}~{max_date}')
1244
+ # m_engine.df_to_mysql(
1245
+ # df=df,
1246
+ # db_name=db_name,
1247
+ # table_name='京东_京准通_按spu',
1248
+ # # icm_update=['日期', '产品线', '触发sku_id', '跟单sku_id', '花费', ], # 增量更新, 在聚合数据中使用,其他不要用
1249
+ # move_insert=True, # 先删除,再插入
1250
+ # df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
1251
+ # drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
1252
+ # count=None,
1253
+ # filename=None, # 用来追踪处理进度
1254
+ # reset_id=False, # 是否重置自增列
1255
+ # set_typ=set_typ,
1256
+ #
1257
+ # )
1258
+
1190
1259
  return True
1191
1260
 
1192
1261
  @try_except
@@ -1213,14 +1282,15 @@ class MysqlDatasQuery:
1213
1282
  projection=projection,
1214
1283
  )
1215
1284
  df = df.groupby(['日期', '店铺名称', '产品线', '花费'], as_index=False).agg(
1216
- **{'全站投产比': ('全站投产比', np.max),
1217
- '全站交易额': ('全站交易额', np.max),
1218
- '全站订单行': ('全站订单行', np.max),
1219
- '全站订单成本': ('全站订单成本', np.max),
1220
- '全站费比': ('全站费比', np.max),
1221
- '核心位置展现量': ('核心位置展现量', np.max),
1222
- '核心位置点击量': ('核心位置点击量', np.max),
1223
- }
1285
+ **{
1286
+ '全站投产比': ('全站投产比', np.max),
1287
+ '全站交易额': ('全站交易额', np.max),
1288
+ '全站订单行': ('全站订单行', np.max),
1289
+ '全站订单成本': ('全站订单成本', np.max),
1290
+ '全站费比': ('全站费比', np.max),
1291
+ '核心位置展现量': ('核心位置展现量', np.max),
1292
+ '核心位置点击量': ('核心位置点击量', np.max),
1293
+ }
1224
1294
  )
1225
1295
  df = df[df['花费'] > 0]
1226
1296
  set_typ = {
@@ -1403,6 +1473,7 @@ class MysqlDatasQuery:
1403
1473
  '加购人数': 'int',
1404
1474
  '成交单量': 'int',
1405
1475
  '成交金额': 'decimal(10,2)',
1476
+ 'sku_id': 'varchar(100)',
1406
1477
  }
1407
1478
  min_date = df['日期'].min()
1408
1479
  max_date = df['日期'].max()
@@ -1420,7 +1491,6 @@ class MysqlDatasQuery:
1420
1491
  filename=None, # 用来追踪处理进度
1421
1492
  reset_id=False, # 是否重置自增列
1422
1493
  set_typ=set_typ,
1423
-
1424
1494
  )
1425
1495
  return True
1426
1496
 
@@ -1465,6 +1535,7 @@ class MysqlDatasQuery:
1465
1535
  '加购人数': 'int',
1466
1536
  '成交单量': 'int',
1467
1537
  '成交金额': 'decimal(10,2)',
1538
+ 'spu_id': 'varchar(100)',
1468
1539
  }
1469
1540
  min_date = df['日期'].min()
1470
1541
  max_date = df['日期'].max()
@@ -1916,13 +1987,14 @@ class MysqlDatasQuery:
1916
1987
  if len(df_jd) > 0:
1917
1988
  df_jd = df_jd.groupby(['日期', '店铺名称', '产品线', '触发sku_id', '跟单sku_id', 'spu_id', '花费', '展现数', '点击数'],
1918
1989
  as_index=False).agg(
1919
- **{'直接订单行': ('直接订单行', np.max),
1920
- '直接订单金额': ('直接订单金额', np.max),
1921
- '成交笔数': ('总订单行', np.max),
1922
- '成交金额': ('总订单金额', np.max),
1923
- '直接加购数': ('直接加购数', np.max),
1924
- '加购量': ('总加购数', np.max),
1925
- }
1990
+ **{
1991
+ '直接订单行': ('直接订单行', np.max),
1992
+ '直接订单金额': ('直接订单金额', np.max),
1993
+ '成交笔数': ('总订单行', np.max),
1994
+ '成交金额': ('总订单金额', np.max),
1995
+ '直接加购数': ('直接加购数', np.max),
1996
+ '加购量': ('总加购数', np.max),
1997
+ }
1926
1998
  )
1927
1999
  df_jd = df_jd[['日期', '店铺名称', '产品线', '花费', '展现数', '点击数', '加购量', '成交笔数', '成交金额']]
1928
2000
  df_jd.rename(columns={'产品线': '营销场景', '展现数': '展现量', '点击数': '点击量'}, inplace=True)
@@ -2911,24 +2983,38 @@ def date_table():
2911
2983
  )
2912
2984
 
2913
2985
 
2914
- def main(days=100, months=3):
2986
+ def main(days=150, months=3):
2987
+ """
2988
+ days: 清理聚合数据的日期长度
2989
+ months: 生成聚合数据的长度
2990
+ """
2915
2991
  # 1. 更新日期表 更新货品年份基准表, 属性设置 3 - 货品年份基准
2916
2992
  date_table()
2917
2993
  p = products.Products()
2918
2994
  p.to_mysql()
2919
2995
 
2920
- # 2. 数据聚合
2996
+ # 清理非聚合数据库
2921
2997
  system = platform.system() # 本机系统
2922
2998
  host_name = socket.gethostname() # 本机名
2923
2999
  conf = myconfig.main()
2924
3000
  db_list = conf[system][host_name]['mysql']['数据库集']
3001
+ not_juhe_db_list = [item for item in db_list if item != '聚合数据']
3002
+ optimize_data.op_data(
3003
+ db_name_lists=not_juhe_db_list,
3004
+ days= 31, # 清理聚合数据的日期长度
3005
+ is_mongo=False,
3006
+ is_mysql=True,
3007
+ )
3008
+
3009
+ # 2. 数据聚合
2925
3010
  query_(months=months)
2926
3011
  time.sleep(60)
2927
3012
 
2928
3013
  # 3. 清理聚合数据
3014
+
2929
3015
  optimize_data.op_data(
2930
- db_name_lists=db_list,
2931
- days=days,
3016
+ db_name_lists=['聚合数据'],
3017
+ days=days, # 清理聚合数据的日期长度
2932
3018
  is_mongo=False,
2933
3019
  is_mysql=True,
2934
3020
  )
@@ -2971,12 +3057,16 @@ def query_(months=1, less_dict=[]):
2971
3057
 
2972
3058
  if __name__ == '__main__':
2973
3059
  main(days=150, months=3)
2974
- # query_(months=1)
2975
-
3060
+ # query_(months=3)
3061
+ #
3062
+ # system = platform.system() # 本机系统
3063
+ # host_name = socket.gethostname() # 本机名
3064
+ # conf = myconfig.main()
3065
+ # db_list = conf[system][host_name]['mysql']['数据库集']
2976
3066
  # # 4. 清理聚合数据
2977
3067
  # optimize_data.op_data(
2978
3068
  # db_name_lists=['聚合数据'],
2979
- # days=200,
3069
+ # days=3650,
2980
3070
  # is_mongo=False,
2981
3071
  # is_mysql=True,
2982
3072
  # )
@@ -840,7 +840,7 @@ class OptimizeDatas:
840
840
  self.db_name = db_name
841
841
  self.optimize()
842
842
 
843
- def optimize(self):
843
+ def optimize(self, except_key=['更新时间']):
844
844
  """ 更新一个数据库 移除冗余数据 """
845
845
  if not self.db_name:
846
846
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S ")
@@ -904,12 +904,13 @@ class OptimizeDatas:
904
904
  if self.end_date > pd.to_datetime(max_result['max_date']):
905
905
  self.end_date = pd.to_datetime(max_result['max_date'])
906
906
  dates_list = self.day_list(start_date=self.start_date, end_date=self.end_date)
907
+ # dates_list 是日期列表
907
908
  for date in dates_list:
908
- self.delete_duplicate(table_name=table_name, date=date)
909
+ self.delete_duplicate(table_name=table_name, date=date, except_key=except_key)
909
910
  self.start_date = start_date_before # 重置,不然日期错乱
910
911
  self.end_date = end_date_before
911
912
  else: # 不存在日期列的情况
912
- self.delete_duplicate2(table_name=table_name)
913
+ self.delete_duplicate2(table_name=table_name, except_key=except_key)
913
914
 
914
915
  # # 5. 重置自增列 (id 列)
915
916
  # try:
@@ -927,13 +928,16 @@ class OptimizeDatas:
927
928
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S ")
928
929
  print(f'{now}mysql({self.host}: {self.port}) {self.db_name} 数据库优化完成!')
929
930
 
930
- def delete_duplicate(self, table_name, date):
931
+ def delete_duplicate(self, table_name, date, except_key=['更新时间']):
931
932
  datas = self.table_datas(db_name=self.db_name, table_name=str(table_name), date=date)
932
933
  if not datas:
933
934
  return
934
935
  duplicate_id = [] # 出现重复的 id
935
936
  all_datas = [] # 迭代器
936
937
  for data in datas:
938
+ for e_key in except_key:
939
+ if e_key in data.keys(): # 在检查重复数据时,不包含 更新时间 字段
940
+ del data[e_key]
937
941
  try:
938
942
  delete_id = data['id']
939
943
  del data['id']
@@ -962,7 +966,7 @@ class OptimizeDatas:
962
966
  print(f'{self.db_name}/{table_name}, {e}')
963
967
  self.connection.rollback() # 异常则回滚
964
968
 
965
- def delete_duplicate2(self, table_name):
969
+ def delete_duplicate2(self, table_name, except_key=['更新时间']):
966
970
  with self.connection.cursor() as cursor:
967
971
  sql = f"SELECT * FROM {table_name}" # 如果不包含日期列,则获取全部数据
968
972
  cursor.execute(sql)
@@ -972,6 +976,9 @@ class OptimizeDatas:
972
976
  duplicate_id = [] # 出现重复的 id
973
977
  all_datas = [] # 迭代器
974
978
  for data in datas:
979
+ for e_key in except_key:
980
+ if e_key in data.keys(): # 在检查重复数据时,不包含 更新时间 字段
981
+ del data[e_key]
975
982
  delete_id = data['id']
976
983
  del data['id']
977
984
  data = re.sub(r'\.0+\', ', '\', ', str(data)) # 统一移除小数点后面的 0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 3.0.7
3
+ Version: 3.0.9
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -3,7 +3,7 @@
3
3
  from setuptools import setup, find_packages
4
4
 
5
5
  setup(name='mdbq',
6
- version='3.0.7',
6
+ version='3.0.9',
7
7
  author='xigua, ',
8
8
  author_email="2587125111@qq.com",
9
9
  url='https://pypi.org/project/mdbq',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes