mdbq 2.9.8__py3-none-any.whl → 3.0.0__py3-none-any.whl

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.
@@ -51,6 +51,9 @@ class MysqlDatasQuery:
51
51
  self.months = 0 # 下载几个月数据, 0 表示当月, 1 是上月 1 号至今
52
52
  # 实例化一个下载类
53
53
  self.download = s_query.QueryDatas(username=username, password=password, host=host, port=port)
54
+ self.update_service = True # 调试时加,true: 将数据写入 mysql 服务器
55
+ self.pf_datas = []
56
+ self.pf_datas_jd = [] # 京东聚合销售表
54
57
 
55
58
  @staticmethod
56
59
  def try_except(func): # 在类内部定义一个异常处理方法
@@ -145,6 +148,22 @@ class MysqlDatasQuery:
145
148
  '直接成交笔数': 'int',
146
149
  '直接成交金额': 'decimal(12,2)',
147
150
  }
151
+ self.pf_datas.append(
152
+ {
153
+ '集合名称': table_name,
154
+ '数据主体': df[['日期', '店铺名称', '商品id', '花费', '成交金额', '直接成交金额']]
155
+ }
156
+ ) # 制作其他聚合表
157
+ self.pf_datas.append(
158
+ {
159
+ '集合名称': '天猫汇总表调用',
160
+ '数据主体': df[
161
+ ['日期', '店铺名称', '推广渠道', '营销场景', '商品id', '花费', '展现量', '点击量', '加购量',
162
+ '成交笔数', '成交金额', '直接成交笔数', '直接成交金额', '自然流量曝光量']]
163
+ }
164
+ ) # 制作其他聚合表
165
+ if not self.update_service:
166
+ return
148
167
  min_date = df['日期'].min()
149
168
  max_date = df['日期'].max()
150
169
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
@@ -221,9 +240,17 @@ class MysqlDatasQuery:
221
240
  '退款额': 'decimal(12,2)',
222
241
  '退款额_发货后': 'decimal(12,2)',
223
242
  '退货量_发货后': 'int',
224
- '件均价': 'smallint',
243
+ '件均价': 'mediumint',
225
244
  '价格带': 'varchar(100)',
226
245
  }
246
+ self.pf_datas.append(
247
+ {
248
+ '集合名称': table_name,
249
+ '数据主体': df[['日期', '店铺名称', '宝贝id', '销售额', '销售量', '退款额_发货后', '退货量_发货后']]
250
+ }
251
+ ) # 制作其他聚合表
252
+ if not self.update_service:
253
+ return
227
254
  min_date = df['日期'].min()
228
255
  max_date = df['日期'].max()
229
256
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
@@ -628,6 +655,14 @@ class MysqlDatasQuery:
628
655
  }
629
656
  )
630
657
  df.insert(loc=1, column='推广渠道', value='万相台无界版') # df中插入新列
658
+ self.pf_datas.append(
659
+ {
660
+ '集合名称': table_name,
661
+ '数据主体': df[['日期', '店铺名称', '推广渠道', '营销场景', '花费', '展现量', '观看次数', '加购量', '成交笔数', '成交金额', '直接成交笔数', '直接成交金额']]
662
+ },
663
+ ) # 制作其他聚合表
664
+ if not self.update_service:
665
+ return
631
666
  set_typ = {
632
667
  '日期': 'date',
633
668
  '推广渠道': 'varchar(100)',
@@ -730,6 +765,14 @@ class MysqlDatasQuery:
730
765
  )
731
766
  df.insert(loc=1, column='推广渠道', value='品销宝') # df中插入新列
732
767
  df.insert(loc=2, column='营销场景', value='品销宝') # df中插入新列
768
+ self.pf_datas.append(
769
+ {
770
+ '集合名称': table_name,
771
+ '数据主体': df[['日期', '店铺名称', '推广渠道', '营销场景', '花费', '展现量', '点击量', '加购量', '成交笔数', '成交金额']]
772
+ },
773
+ ) # 制作其他聚合表
774
+ if not self.update_service:
775
+ return
733
776
  set_typ = {
734
777
  '日期': 'date',
735
778
  '推广渠道': 'varchar(100)',
@@ -793,6 +836,14 @@ class MysqlDatasQuery:
793
836
  '二级类目': 'varchar(100)',
794
837
  '三级类目': 'varchar(100)',
795
838
  }
839
+ self.pf_datas.append(
840
+ {
841
+ '集合名称': table_name,
842
+ '数据主体': df[['宝贝id', '商家编码']]
843
+ }
844
+ ) # 制作其他聚合表
845
+ if not self.update_service:
846
+ return
796
847
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
797
848
  print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name}')
798
849
  m_engine.df_to_mysql(
@@ -842,6 +893,14 @@ class MysqlDatasQuery:
842
893
  '日期': 'date',
843
894
  '商品链接': 'varchar(255)',
844
895
  }
896
+ self.pf_datas.append(
897
+ {
898
+ '集合名称': table_name,
899
+ '数据主体': df[['商品id', '商品图片']]
900
+ }
901
+ ) # 制作其他聚合表
902
+ if not self.update_service:
903
+ return
845
904
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
846
905
  print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name}')
847
906
  m_engine.df_to_mysql(
@@ -960,8 +1019,16 @@ class MysqlDatasQuery:
960
1019
  '天猫页面价': 'decimal(10,2)',
961
1020
  '天猫中促价': 'decimal(10,2)',
962
1021
  }
963
- min_date = df['日期'].min()
964
- max_date = df['日期'].max()
1022
+ self.pf_datas.append(
1023
+ {
1024
+ '集合名称': table_name,
1025
+ '数据主体': df[['款号', '成本价']]
1026
+ }
1027
+ ) # 制作其他聚合表
1028
+ if not self.update_service:
1029
+ return
1030
+ min_date = pd.to_datetime(df['日期'].min()).strftime('%Y-%m-%d')
1031
+ max_date = pd.to_datetime(df['日期'].max()).strftime('%Y-%m-%d')
965
1032
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
966
1033
  print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
967
1034
  m_engine.df_to_mysql(
@@ -1018,6 +1085,14 @@ class MysqlDatasQuery:
1018
1085
  }
1019
1086
  )
1020
1087
  df = df[df['花费'] > 0]
1088
+ self.pf_datas_jd.append(
1089
+ {
1090
+ '集合名称': table_name,
1091
+ '数据主体': df[['日期', '产品线', '触发sku_id', '跟单sku_id', '花费']]
1092
+ }
1093
+ ) # 制作其他聚合表
1094
+ if not self.update_service:
1095
+ return
1021
1096
  set_typ = {
1022
1097
  '日期': 'date',
1023
1098
  '店铺名称': 'varchar(100)',
@@ -1247,6 +1322,14 @@ class MysqlDatasQuery:
1247
1322
  '成交金额': ('成交金额', np.max),
1248
1323
  }
1249
1324
  )
1325
+ self.pf_datas_jd.append(
1326
+ {
1327
+ '集合名称': table_name,
1328
+ '数据主体': df
1329
+ }
1330
+ ) # 制作其他聚合表
1331
+ if not self.update_service:
1332
+ return
1250
1333
  set_typ = {
1251
1334
  '日期': 'date',
1252
1335
  '店铺名称': 'varchar(100)',
@@ -1399,11 +1482,15 @@ class MysqlDatasQuery:
1399
1482
  '客单价': 'decimal(10,2)',
1400
1483
  'uv价值': 'decimal(10,2)',
1401
1484
  }
1485
+ min_date = df['日期'].min()
1486
+ max_date = df['日期'].max()
1487
+ now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
1488
+ print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
1402
1489
  m_engine.df_to_mysql(
1403
1490
  df=df,
1404
1491
  db_name=db_name,
1405
1492
  table_name=table_name,
1406
- icm_update=['日期', '关键词', '访客数'], # 增量更新, 在聚合数据中使用,其他不要用
1493
+ icm_update=['日期', '店铺名称', '词类型', '搜索词'], # 增量更新, 在聚合数据中使用,其他不要用
1407
1494
  move_insert=False, # 先删除,再插入
1408
1495
  df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
1409
1496
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
@@ -1783,6 +1870,8 @@ class MysqlDatasQuery:
1783
1870
  '成交笔数': 'int',
1784
1871
  '成交金额': 'decimal(12,2)',
1785
1872
  }
1873
+ if not self.update_service:
1874
+ return
1786
1875
  min_date = df['日期'].min()
1787
1876
  max_date = df['日期'].max()
1788
1877
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
@@ -2296,33 +2385,65 @@ class MysqlDatasQuery:
2296
2385
  return result
2297
2386
 
2298
2387
  # @try_except
2299
- def performance(self, bb_tg=True):
2300
- # print(self.data_tgyj)
2301
- tg, syj, idbm, pic, cost = (
2302
- self.data_tgyj['天猫_主体报表'],
2303
- self.data_tgyj['生意经_宝贝指标'],
2304
- self.data_tgyj['商品id编码表'],
2305
- self.data_tgyj['商品id图片对照表'],
2306
- self.data_tgyj['商品成本']) # 这里不要加逗号
2307
- pic['商品id'] = pic['商品id'].astype(str)
2308
- df = pd.merge(idbm, pic, how='left', left_on='宝贝id', right_on='商品id') # id 编码表合并图片表
2309
- df = df[['宝贝id', '商家编码', '商品图片']]
2310
- df = pd.merge(df, cost, how='left', left_on='商家编码', right_on='款号') # df 合并商品成本表
2311
- df = df[['宝贝id', '商家编码', '商品图片', '成本价']]
2312
- df = pd.merge(tg, df, how='left', left_on='商品id', right_on='宝贝id') # 推广表合并 df
2313
- df.drop(labels='宝贝id', axis=1, inplace=True)
2388
+ def performance(self, db_name, table_name, bb_tg=True):
2389
+
2390
+ tg= [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '天猫_主体报表'][0]
2391
+ syj = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '生意经_宝贝指标'][0]
2392
+ idbm = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '商品id编码表'][0]
2393
+ pic = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '商品id图片对照表'][0]
2394
+ cost = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '商品成本'][0]
2395
+
2396
+ # 由于推广表之前根据场景、营销渠道等聚合的,这里不含这些字段所以要进一步聚合
2397
+ tg = tg.groupby(
2398
+ ['日期', '店铺名称', '商品id'],
2399
+ as_index=False).agg(
2400
+ **{
2401
+ '花费': ('花费', np.sum),
2402
+ '成交金额': ('成交金额', np.sum),
2403
+ '直接成交金额': ('直接成交金额', np.sum),
2404
+ }
2405
+ )
2406
+ # 4. 生意经,推广表聚合
2314
2407
  if bb_tg is True:
2315
2408
  # 生意经合并推广表,完整的数据表,包含全店所有推广、销售数据
2316
- df = pd.merge(syj, df, how='left', left_on=['日期', '店铺名称', '宝贝id'], right_on=['日期', '店铺名称', '商品id'])
2409
+ df = pd.merge(syj, tg, how='left', left_on=['日期', '店铺名称', '宝贝id'], right_on=['日期', '店铺名称', '商品id'])
2317
2410
  df.drop(labels='商品id', axis=1, inplace=True) # 因为生意经中的宝贝 id 列才是完整的
2318
2411
  df.rename(columns={'宝贝id': '商品id'}, inplace=True)
2319
- # df.to_csv('/Users/xigua/Downloads/test.csv', encoding='utf-8_sig', index=False, header=True)
2320
2412
  else:
2321
2413
  # 推广表合并生意经 , 以推广数据为基准,销售数据不齐全
2322
- df = pd.merge(df, syj, how='left', left_on=['日期', '店铺名称', '商品id'], right_on=['日期', '店铺名称', '宝贝id'])
2414
+ df = pd.merge(tg, syj, how='left', left_on=['日期', '店铺名称', '商品id'], right_on=['日期', '店铺名称', '宝贝id'])
2323
2415
  df.drop(labels='宝贝id', axis=1, inplace=True)
2324
- df.drop_duplicates(subset=['日期', '店铺名称', '商品id', '花费', '销售额'], keep='last', inplace=True, ignore_index=True)
2325
- df.fillna(0, inplace=True)
2416
+
2417
+ df['商品id'] = df['商品id'].astype(int)
2418
+ df = df.groupby(
2419
+ ['日期', '店铺名称', '商品id'],
2420
+ as_index=False).agg(
2421
+ **{
2422
+ '花费': ('花费', np.sum),
2423
+ '成交金额': ('成交金额', np.sum),
2424
+ '直接成交金额': ('直接成交金额', np.sum),
2425
+ '销售额': ('销售额', np.sum),
2426
+ '销售量': ('销售量', np.sum),
2427
+ '退款额_发货后': ('退款额_发货后', np.sum),
2428
+ '退货量_发货后': ('退货量_发货后', np.sum),
2429
+ }
2430
+ )
2431
+ # print(df.info())
2432
+
2433
+ idbm['宝贝id'] = idbm['宝贝id'].astype(int)
2434
+ # 1. id 编码表合并图片表
2435
+ df_cb = pd.merge(idbm, pic, how='left', left_on='宝贝id', right_on='商品id')
2436
+ df_cb = df_cb[['宝贝id', '商家编码', '商品图片']]
2437
+ # 2. df 合并商品成本表
2438
+ df_cb = pd.merge(df_cb, cost, how='left', left_on='商家编码', right_on='款号')
2439
+ df_cb = df_cb[['宝贝id', '商家编码', '商品图片', '成本价']]
2440
+ # print(df_cb.info())
2441
+ # 3. 合并 df
2442
+ df = pd.merge(df, df_cb, how='left', left_on='商品id', right_on='宝贝id')
2443
+ df.drop(labels='宝贝id', axis=1, inplace=True)
2444
+
2445
+ # df.drop_duplicates(subset=['日期', '店铺名称', '商品id', '花费', '销售额'], keep='last', inplace=True, ignore_index=True)
2446
+ # df.fillna(0, inplace=True)
2326
2447
  df['成本价'] = df['成本价'].astype('float64')
2327
2448
  df['销售额'] = df['销售额'].astype('float64')
2328
2449
  df['销售量'] = df['销售量'].astype('int64')
@@ -2330,11 +2451,75 @@ class MysqlDatasQuery:
2330
2451
  df['商品毛利'] = df.apply(lambda x: x['销售额'] - x['商品成本'], axis=1)
2331
2452
  df['毛利率'] = df.apply(lambda x: round((x['销售额'] - x['商品成本']) / x['销售额'], 4) if x['销售额'] > 0 else 0, axis=1)
2332
2453
  df['盈亏'] = df.apply(lambda x: x['商品毛利'] - x['花费'], axis=1)
2333
- return df
2454
+ [df[col].apply(lambda x: '0' if str(x) == '' else x) for col in df.columns.tolist()]
2455
+ set_typ = {
2456
+ '日期': 'date',
2457
+ '店铺名称': 'varchar(100)',
2458
+ '商品id': 'bigint',
2459
+ '销售额': 'decimal(12,2)',
2460
+ '销售量': 'int',
2461
+ '退款额_发货后': 'decimal(12,2)',
2462
+ '退货量_发货后': 'int',
2463
+ '花费': 'decimal(12,2)',
2464
+ '成交金额': 'decimal(12,2)',
2465
+ '直接成交金额': 'decimal(12,2)',
2466
+ '商家编码': 'varchar(100)',
2467
+ '商品图片': 'varchar(255)',
2468
+ '成本价': 'decimal(10,2)',
2469
+ '商品成本': 'decimal(10,2)',
2470
+ '商品毛利': 'decimal(10,2)',
2471
+ '毛利率': 'decimal(12,4)',
2472
+ '盈亏': 'decimal(12,4)',
2473
+ }
2474
+ if not self.update_service:
2475
+ return
2476
+ min_date = df['日期'].min()
2477
+ max_date = df['日期'].max()
2478
+ now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
2479
+ print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
2480
+ m_engine.df_to_mysql(
2481
+ df=df,
2482
+ db_name=db_name,
2483
+ table_name=table_name,
2484
+ icm_update=[], # 增量更新, 在聚合数据中使用,其他不要用
2485
+ move_insert=True, # 先删除,再插入
2486
+ df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
2487
+ drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
2488
+ count=None,
2489
+ filename=None, # 用来追踪处理进度
2490
+ reset_id=False, # 是否重置自增列
2491
+ set_typ=set_typ,
2492
+ )
2493
+ return True
2334
2494
 
2335
2495
  # @try_except
2336
- def performance_concat(self, bb_tg=True):
2337
- tg, zb, pxb = self.data_tgyj['天猫汇总表调用'], self.data_tgyj['天猫_超级直播'], self.data_tgyj['天猫_品销宝账户报表']
2496
+ def performance_concat(self, db_name, table_name, bb_tg=True):
2497
+ tg = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '天猫汇总表调用'][0]
2498
+ zb = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '天猫_超级直播'][0]
2499
+ pxb = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '天猫_品销宝账户报表'][0]
2500
+ zb = zb.groupby(['日期', '店铺名称', '推广渠道', '营销场景'], as_index=False).agg(
2501
+ **{
2502
+ '花费': ('花费', np.sum),
2503
+ '展现量': ('展现量', np.sum),
2504
+ '观看次数': ('观看次数', np.sum),
2505
+ '加购量': ('加购量', np.sum),
2506
+ '成交笔数': ('成交笔数', np.sum),
2507
+ '成交金额': ('成交金额', np.sum),
2508
+ '直接成交笔数': ('直接成交笔数', np.sum),
2509
+ '直接成交金额': ('直接成交金额', np.sum),
2510
+ }
2511
+ )
2512
+ pxb = pxb.groupby(['日期', '店铺名称', '推广渠道', '营销场景'], as_index=False).agg(
2513
+ **{
2514
+ '花费': ('花费', np.sum),
2515
+ '展现量': ('展现量', np.sum),
2516
+ '点击量': ('点击量', np.sum),
2517
+ '加购量': ('加购量', np.sum),
2518
+ '成交笔数': ('成交笔数', np.sum),
2519
+ '成交金额': ('成交金额', np.sum)
2520
+ }
2521
+ )
2522
+
2338
2523
  zb.rename(columns={
2339
2524
  '观看次数': '点击量',
2340
2525
  }, inplace=True)
@@ -2379,23 +2564,62 @@ class MysqlDatasQuery:
2379
2564
  '自然流量曝光量': int,
2380
2565
  }
2381
2566
  )
2382
- return df
2567
+ [df[col].apply(lambda x: '0' if str(x) == '' else x) for col in df.columns.tolist()]
2568
+ set_typ = {
2569
+ '日期': 'date',
2570
+ '店铺名称': 'varchar(100)',
2571
+ '推广渠道': 'varchar(100)',
2572
+ '营销场景': 'varchar(100)',
2573
+ '商品id': 'bigint',
2574
+ '花费': 'decimal(12,2)',
2575
+ '展现量': 'int',
2576
+ '点击量': 'int',
2577
+ '加购量': 'int',
2578
+ '成交笔数': 'int',
2579
+ '成交金额': 'decimal(12,2)',
2580
+ '直接成交笔数': 'int',
2581
+ '直接成交金额': 'decimal(12,2)',
2582
+ '自然流量曝光量': 'int',
2583
+ }
2584
+ if not self.update_service:
2585
+ return
2586
+ min_date = df['日期'].min()
2587
+ max_date = df['日期'].max()
2588
+ now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
2589
+ print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
2590
+ m_engine.df_to_mysql(
2591
+ df=df,
2592
+ db_name=db_name,
2593
+ table_name=table_name,
2594
+ icm_update=[], # 增量更新, 在聚合数据中使用,其他不要用
2595
+ move_insert=True, # 先删除,再插入
2596
+ df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
2597
+ drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
2598
+ count=None,
2599
+ filename=None, # 用来追踪处理进度
2600
+ reset_id=False, # 是否重置自增列
2601
+ set_typ=set_typ,
2602
+ )
2603
+ return True
2383
2604
 
2384
2605
  # @try_except
2385
- def performance_jd(self, jd_tg=True):
2386
- jdtg, sku_sales = self.data_jdtg['京东_京准通'], self.data_jdtg['京东_sku_商品明细']
2606
+ def performance_jd(self, db_name, table_name, jd_tg=True, ):
2607
+ jdtg = [item['数据主体'] for item in self.pf_datas_jd if item['集合名称'] == '京东_京准通'][0]
2608
+ sku_sales = [item['数据主体'] for item in self.pf_datas_jd if item['集合名称'] == '京东_sku_商品明细'][0]
2609
+ cost = [item['数据主体'] for item in self.pf_datas if item['集合名称'] == '商品成本'][0]
2610
+
2387
2611
  jdtg = jdtg.groupby(['日期', '跟单sku_id'],
2388
2612
  as_index=False).agg(
2389
2613
  **{
2390
2614
  '花费': ('花费', np.sum)
2391
2615
  }
2392
2616
  )
2393
- cost = self.data_tgyj['商品成本']
2394
2617
  df = pd.merge(sku_sales, cost, how='left', left_on='货号', right_on='款号')
2395
2618
  df = df[['日期', '商品id', '货号', '成交单量', '成交金额', '成本价']]
2396
2619
  df['商品id'] = df['商品id'].astype(str)
2397
2620
  jdtg['跟单sku_id'] = jdtg['跟单sku_id'].astype(str)
2398
2621
  jdtg = jdtg.astype({'日期': 'datetime64[ns]'}, errors='raise')
2622
+ df = df.astype({'日期': 'datetime64[ns]'}, errors='raise')
2399
2623
  if jd_tg is True:
2400
2624
  # 完整的数据表,包含全店所有推广、销售数据
2401
2625
  df = pd.merge(df, jdtg, how='left', left_on=['日期', '商品id'], right_on=['日期', '跟单sku_id']) # df 合并推广表
@@ -2414,7 +2638,40 @@ class MysqlDatasQuery:
2414
2638
  df['毛利率'] = df.apply(
2415
2639
  lambda x: round((x['成交金额'] - x['商品成本']) / x['成交金额'], 4) if x['成交金额'] > 0 else 0, axis=1)
2416
2640
  df['盈亏'] = df.apply(lambda x: x['商品毛利'] - x['花费'], axis=1)
2417
- return df
2641
+ [df[col].apply(lambda x: '0' if str(x) == '' else x) for col in df.columns.tolist()]
2642
+ set_typ = {
2643
+ '日期': 'date',
2644
+ '跟单sku_id': 'bigint',
2645
+ '花费': 'decimal(12,2)',
2646
+ '货号': 'varchar(100)',
2647
+ '成交单量': 'int',
2648
+ '成交金额': 'decimal(12,2)',
2649
+ '成本价': 'decimal(10,2)',
2650
+ '商品成本': 'decimal(10,2)',
2651
+ '商品毛利': 'decimal(10,2)',
2652
+ '毛利率': 'decimal(12,4)',
2653
+ '盈亏': 'decimal(12,4)',
2654
+ }
2655
+ if not self.update_service:
2656
+ return
2657
+ min_date = df['日期'].min()
2658
+ max_date = df['日期'].max()
2659
+ now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
2660
+ print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
2661
+ m_engine.df_to_mysql(
2662
+ df=df,
2663
+ db_name=db_name,
2664
+ table_name=table_name,
2665
+ icm_update=[], # 增量更新, 在聚合数据中使用,其他不要用
2666
+ move_insert=True, # 先删除,再插入
2667
+ df_sql=False, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
2668
+ drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
2669
+ count=None,
2670
+ filename=None, # 用来追踪处理进度
2671
+ reset_id=False, # 是否重置自增列
2672
+ set_typ=set_typ,
2673
+ )
2674
+ return True
2418
2675
 
2419
2676
 
2420
2677
  def date_table():
@@ -2450,6 +2707,17 @@ def date_table():
2450
2707
  host=host,
2451
2708
  port=port,
2452
2709
  )
2710
+ set_typ = {
2711
+ '日期': 'date',
2712
+ '年': 'varchar(50)',
2713
+ '月': 'varchar(50)',
2714
+ '日': 'int',
2715
+ '年月': 'varchar(50)',
2716
+ '月日': 'varchar(50)',
2717
+ '第n周': 'varchar(50)',
2718
+ '索引': 'int',
2719
+ '月索引': 'int',
2720
+ }
2453
2721
  m.df_to_mysql(
2454
2722
  df=df,
2455
2723
  db_name='聚合数据',
@@ -2459,7 +2727,7 @@ def date_table():
2459
2727
  drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
2460
2728
  count=None,
2461
2729
  filename=None, # 用来追踪处理进度
2462
- set_typ={},
2730
+ set_typ=set_typ,
2463
2731
  )
2464
2732
 
2465
2733
 
@@ -2483,7 +2751,7 @@ def main(days=100, months=3):
2483
2751
  )
2484
2752
 
2485
2753
  # 3. 数据聚合
2486
- query_(months=3)
2754
+ query_(months=months)
2487
2755
  time.sleep(60)
2488
2756
 
2489
2757
  # 4. 清理聚合数据
@@ -2501,13 +2769,14 @@ def query_(months=1, less_dict=[]):
2501
2769
  return
2502
2770
  sdq = MysqlDatasQuery() # 实例化数据处理类
2503
2771
  sdq.months = months # 设置数据周期, 1 表示近 2 个月
2772
+ sdq.update_service = True # 调试时加,true: 将数据写入 mysql 服务器
2504
2773
 
2505
2774
  sdq.tg_wxt(db_name='聚合数据', table_name='天猫_主体报表')
2506
2775
  sdq.syj(db_name='聚合数据', table_name='生意经_宝贝指标')
2507
- sdq.dplyd(db_name='聚合数据', table_name='店铺流量来源构成')
2508
2776
  sdq.idbm(db_name='聚合数据', table_name='商品id编码表')
2509
2777
  sdq.sp_picture(db_name='聚合数据', table_name='商品id图片对照表')
2510
2778
  sdq.sp_cost(db_name='聚合数据', table_name='商品成本')
2779
+ sdq.dplyd(db_name='聚合数据', table_name='店铺流量来源构成')
2511
2780
  sdq.jdjzt(db_name='聚合数据', table_name='京东_京准通')
2512
2781
  sdq.jdqzyx(db_name='聚合数据', table_name='京东_京准通_全站营销')
2513
2782
  sdq.sku_sales(db_name='聚合数据', table_name='京东_sku_商品明细')
@@ -2522,9 +2791,12 @@ def query_(months=1, less_dict=[]):
2522
2791
  sdq.tg_by_day(db_name='聚合数据', table_name='多店推广场景_按日聚合')
2523
2792
  sdq.aikucun_bd_spu(db_name='聚合数据', table_name='爱库存_商品spu榜单')
2524
2793
  sdq.dmp_crowd(db_name='聚合数据', table_name='达摩盘_人群报表')
2794
+ sdq.performance(bb_tg=True, db_name='聚合数据', table_name='_全店商品销售') # _全店商品销售
2795
+ sdq.performance(bb_tg=False, db_name='聚合数据', table_name='_推广商品销售') # _推广商品销售
2796
+ sdq.performance_jd(jd_tg=False, db_name='聚合数据', table_name='_京东_推广商品销售') # _推广商品销售
2797
+ sdq.performance_concat(bb_tg=False, db_name='聚合数据', table_name='天猫_推广汇总') # _推广商品销售
2525
2798
 
2526
2799
 
2527
2800
  if __name__ == '__main__':
2528
2801
  # main(days=100, months=3)
2529
-
2530
2802
  query_(months=1)
mdbq/mysql/mysql.py CHANGED
@@ -6,19 +6,13 @@ import re
6
6
  import time
7
7
  from functools import wraps
8
8
  import warnings
9
- from unittest.mock import inplace
10
-
11
9
  import pymysql
12
10
  import numpy as np
13
11
  import pandas as pd
14
- from markdown_it.rules_inline.backticks import regex
15
12
  from sqlalchemy import create_engine
16
13
  import os
17
14
  import calendar
18
15
  from mdbq.config import myconfig
19
- from mdbq.config import set_support
20
- from mdbq.dataframe import converter
21
- from mdbq.aggregation import mysql_types
22
16
 
23
17
  warnings.filterwarnings('ignore')
24
18
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 2.9.8
3
+ Version: 3.0.0
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -5,7 +5,7 @@ mdbq/aggregation/aggregation.py,sha256=2KCVXZygQt4xVxGbFcDMBpL3PukY4yQF_uI-qLSTW
5
5
  mdbq/aggregation/df_types.py,sha256=U9i3q2eRPTDY8qAPTw7irzu-Tlg4CIySW9uYro81wdk,8125
6
6
  mdbq/aggregation/mysql_types.py,sha256=YTGyrF9vcRgfkQbpT-e-JdJ7c7VF1dDHgyx9YZRES8w,10934
7
7
  mdbq/aggregation/optimize_data.py,sha256=79uwiM2WqNNFxGpE2wKz742PRq-ZGgFjdOV0vgptHdY,3513
8
- mdbq/aggregation/query_data.py,sha256=e6vb4hPYZL5KWE6O-MtDoY13GWhx5YMDvTyD3rdgy3c,111441
8
+ mdbq/aggregation/query_data.py,sha256=ekMNXE_3tMNUzm4DzkLustCOu62XIEVP-VPHns5nEqY,124191
9
9
  mdbq/aggregation/query_data_bak.py,sha256=r1FU0C4zjXln7oVSrRkElh4Ehl-9mYhGcq57jLbViUA,104071
10
10
  mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
11
11
  mdbq/bdup/bdup.py,sha256=LAV0TgnQpc-LB-YuJthxb0U42_VkPidzQzAagan46lU,4234
@@ -27,7 +27,7 @@ mdbq/log/mylogger.py,sha256=oaT7Bp-Hb9jZt52seP3ISUuxVcI19s4UiqTeouScBO0,3258
27
27
  mdbq/mongo/__init__.py,sha256=SILt7xMtQIQl_m-ik9WLtJSXIVf424iYgCfE_tnQFbw,13
28
28
  mdbq/mongo/mongo.py,sha256=v9qvrp6p1ZRWuPpbSilqveiE0FEcZF7U5xUPI0RN4xs,31880
29
29
  mdbq/mysql/__init__.py,sha256=A_DPJyAoEvTSFojiI2e94zP0FKtCkkwKP1kYUCSyQzo,11
30
- mdbq/mysql/mysql.py,sha256=_geeu7LP-Ur76kr1ka7_jdifnwrnJJjWnUBzlPXOQOQ,60119
30
+ mdbq/mysql/mysql.py,sha256=KGfByf3KJF0xG-DeDANbJVmS96jwqbhapXPwlygC8-s,59917
31
31
  mdbq/mysql/recheck_mysql.py,sha256=rgTpvDMWYTyEn7UQdlig-pdXDluTgiU8JG6lkMh8DV0,8665
32
32
  mdbq/mysql/s_query.py,sha256=fnXncwSmA7CB0ELn1a-YxYZDrYkC2Bcgnj2J4dcQ8X8,8481
33
33
  mdbq/mysql/year_month_day.py,sha256=VgewoE2pJxK7ErjfviL_SMTN77ki8GVbTUcao3vFUCE,1523
@@ -44,7 +44,7 @@ mdbq/req_post/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
44
44
  mdbq/req_post/req_tb.py,sha256=qg7pet73IgKGmCwxaeUyImJIoeK_pBQT9BBKD7fkBNg,36160
45
45
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
46
46
  mdbq/spider/aikucun.py,sha256=01qJo_Di5Kmi2lG5_HKb0OI283b1-Pgqh-nnA0pX4TY,19038
47
- mdbq-2.9.8.dist-info/METADATA,sha256=-YqbseryNUHGqmaRj1Brh9FejzA62uUxgav_hmn14CQ,243
48
- mdbq-2.9.8.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
49
- mdbq-2.9.8.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
50
- mdbq-2.9.8.dist-info/RECORD,,
47
+ mdbq-3.0.0.dist-info/METADATA,sha256=a3HMAijPDSCqXF_6kAcl83eqlMbaiJP9d2_VnUDDUck,243
48
+ mdbq-3.0.0.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
49
+ mdbq-3.0.0.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
50
+ mdbq-3.0.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.1.0)
2
+ Generator: bdist_wheel (0.44.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5