mdbq 3.3.7__py3-none-any.whl → 3.3.9__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.
@@ -2088,6 +2088,8 @@ class MysqlDatasQuery:
2088
2088
  }
2089
2089
  min_date = df['日期'].min()
2090
2090
  max_date = df['日期'].max()
2091
+ now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
2092
+ print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
2091
2093
  new_dict = {
2092
2094
  '日期': '',
2093
2095
  '店铺名称': '',
@@ -2121,23 +2123,24 @@ class MysqlDatasQuery:
2121
2123
  '预售定金支付金额': '',
2122
2124
  '预售预估总金额': '',
2123
2125
  }
2124
- now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
2125
- print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
2126
+ _results = []
2126
2127
  for dict_data in df.to_dict(orient='records'):
2127
2128
  new_dict.update(dict_data)
2128
- m_engine.dict_to_mysql(
2129
+ _results.append(new_dict)
2130
+ if _results:
2131
+ m_engine.insert_many_dict(
2129
2132
  db_name=db_name,
2130
2133
  table_name=table_name,
2131
- dict_data=new_dict,
2134
+ dict_data_list=_results,
2132
2135
  unique_main_key=None,
2133
2136
  icm_update=['场次id'], # 唯一组合键
2134
2137
  main_key=None, # 指定索引列, 通常用日期列,默认会设置日期为索引
2135
2138
  set_typ=set_typ, # 指定数据类型
2136
2139
  )
2137
- company_engine.dict_to_mysql(
2140
+ company_engine.insert_many_dict(
2138
2141
  db_name=db_name,
2139
2142
  table_name=table_name,
2140
- dict_data=new_dict,
2143
+ dict_data_list=_results,
2141
2144
  unique_main_key=None,
2142
2145
  icm_update=['场次id'], # 唯一组合键
2143
2146
  main_key=None, # 指定索引列, 通常用日期列,默认会设置日期为索引
@@ -2564,40 +2567,6 @@ class MysqlDatasQuery:
2564
2567
  max_date = df['日期'].max()
2565
2568
  now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
2566
2569
  print(f'{now} 正在更新: mysql ({host}:{port}) {db_name}/{table_name} -> {min_date}~{max_date}')
2567
- # new_dict = {
2568
- # '日期': '',
2569
- # '店铺名称': '',
2570
- # '序号': '',
2571
- # '商品名称': '',
2572
- # 'spu_id': '',
2573
- # '商品款号': '',
2574
- # '一级类目名称': '',
2575
- # '二级类目名称': '',
2576
- # '三级类目名称': '',
2577
- # '访客量': '',
2578
- # '浏览量': '',
2579
- # '下单gmv': '',
2580
- # '成交gmv': '',
2581
- # '支付人数_成交': '',
2582
- # }
2583
- # for dict_data in df.to_dict(orient='records'):
2584
- # new_dict.update(dict_data)
2585
- # m_engine.dict_to_mysql(
2586
- # db_name=db_name,
2587
- # table_name=table_name,
2588
- # dict_data=new_dict,
2589
- # icm_update=['日期', '店铺名称', 'spu_id', '商品款号'],
2590
- # unique_main_key=None,
2591
- # set_typ=set_typ,
2592
- # )
2593
- # company_engine.dict_to_mysql(
2594
- # db_name=db_name,
2595
- # table_name=table_name,
2596
- # dict_data=new_dict,
2597
- # icm_update=['日期', '店铺名称', 'spu_id', '商品款号'],
2598
- # unique_main_key=None,
2599
- # set_typ=set_typ,
2600
- # )
2601
2570
  m_engine.df_to_mysql(
2602
2571
  df=df,
2603
2572
  db_name=db_name,
@@ -3662,10 +3631,10 @@ def main(days=150, months=3):
3662
3631
 
3663
3632
 
3664
3633
  if __name__ == '__main__':
3665
- main(
3666
- days=150, # 清理聚合数据的日期长度
3667
- months=3 # 生成聚合数据的长度
3668
- )
3634
+ # main(
3635
+ # days=150, # 清理聚合数据的日期长度
3636
+ # months=3 # 生成聚合数据的长度
3637
+ # )
3669
3638
 
3670
3639
  # query_list = [query1, query2]
3671
3640
  # # 使用 ThreadPoolExecutor 来并行运行
@@ -3679,10 +3648,10 @@ if __name__ == '__main__':
3679
3648
  # ),
3680
3649
  # }
3681
3650
 
3682
- # # 3. 清理聚合数据
3683
- # optimize_data.op_data(
3684
- # db_name_lists=['聚合数据'],
3685
- # days=30, # 清理聚合数据的日期长度
3686
- # is_mongo=False,
3687
- # is_mysql=True,
3688
- # )
3651
+ # 3. 清理聚合数据
3652
+ optimize_data.op_data(
3653
+ db_name_lists=['聚合数据'],
3654
+ days=100, # 清理聚合数据的日期长度
3655
+ is_mongo=False,
3656
+ is_mysql=True,
3657
+ )
mdbq/mysql/mysql.py CHANGED
@@ -344,6 +344,221 @@ class MysqlUpload:
344
344
  connection.rollback()
345
345
  connection.commit()
346
346
 
347
+ @try_except
348
+ def insert_many_dict(self, db_name, table_name, dict_data_list, icm_update=None, main_key=None, unique_main_key=None, index_length=100, set_typ=None, allow_not_null=False, cut_data=None):
349
+ """
350
+ 插入字典数据
351
+ dict_data: 字典
352
+ main_key: 指定索引列, 通常用日期列,默认会设置日期为索引
353
+ unique_main_key: 指定唯一索引列
354
+ index_length: 索引长度
355
+ icm_update: 增量更正,指定后 main_key 只用于检查/创建列,不能更新数据
356
+ set_typ: {}
357
+ allow_not_null: 创建允许插入空值的列,正常情况下不允许空值
358
+ """
359
+ if not self.config:
360
+ return
361
+ if icm_update:
362
+ if main_key or unique_main_key:
363
+ print(f'icm_update/unique_main_key/unique_main_key 参数不能同时设定')
364
+ return
365
+ if not main_key:
366
+ main_key = []
367
+ if not unique_main_key:
368
+ unique_main_key = []
369
+
370
+ if not dict_data_list:
371
+ print(f'dict_data_list 不能为空 ')
372
+ return
373
+ dict_data = dict_data_list[0]
374
+ if cut_data:
375
+ if '日期' in dict_data.keys():
376
+ try:
377
+ __y = pd.to_datetime(dict_data['日期']).strftime('%Y')
378
+ __y_m = pd.to_datetime(dict_data['日期']).strftime('%Y-%m')
379
+ if str(cut_data).lower() == 'year':
380
+ table_name = f'{table_name}_{__y}'
381
+ elif str(cut_data).lower() == 'month':
382
+ table_name = f'{table_name}_{__y_m}'
383
+ else:
384
+ print(f'参数不正确,cut_data应为 year 或 month ')
385
+ except Exception as e:
386
+ print(f'{table_name} 将数据按年/月保存(cut_data),但在转换日期时报错 -> {e}')
387
+
388
+ # connection = pymysql.connect(**self.config) # 连接数据库
389
+ connection = self.keep_connect(_db_name=db_name, _config=self.config, max_try=5)
390
+ if not connection:
391
+ return
392
+ with connection.cursor() as cursor:
393
+ cursor.execute(f"SHOW DATABASES LIKE '{db_name}'") # 检查数据库是否存在
394
+ database_exists = cursor.fetchone()
395
+ if not database_exists:
396
+ # 如果数据库不存在,则新建
397
+ if '8.138.27' in str(self.host) or platform.system() == "Linux": # 阿里云 mysql 低版本不支持 0900
398
+ sql = f"CREATE DATABASE `{db_name}` COLLATE utf8mb4_unicode_ci"
399
+ self.config.update({'charset': 'utf8mb4_unicode_ci'})
400
+ if '192.168.1.100' in str(self.host):
401
+ sql = f"CREATE DATABASE `{db_name}`"
402
+ else:
403
+ sql = f"CREATE DATABASE `{db_name}` COLLATE utf8mb4_0900_ai_ci"
404
+ cursor.execute(sql)
405
+ connection.commit()
406
+ print(f"创建Database: {db_name}")
407
+
408
+ self.config.update({'database': db_name}) # 添加更新 config 字段
409
+ # connection = pymysql.connect(**self.config) # 重新连接数据库
410
+ connection = self.keep_connect(_db_name=db_name, _config=self.config, max_try=5)
411
+ if not connection:
412
+ return
413
+ with connection.cursor() as cursor:
414
+ # 1. 查询表, 不存在则创建一个空表
415
+ sql = "SHOW TABLES LIKE %s;" # 有特殊字符不需转义
416
+ cursor.execute(sql, (table_name))
417
+ if not cursor.fetchone():
418
+ sql = f"CREATE TABLE IF NOT EXISTS `{table_name}` (id INT AUTO_INCREMENT PRIMARY KEY);"
419
+ cursor.execute(sql)
420
+ print(f'创建 mysql 表: {table_name}')
421
+
422
+ # 根据 dict_data 的值添加指定的数据类型
423
+ dtypes, dict_data = self.cover_dict_dtypes(dict_data=dict_data) # {'店铺名称': 'varchar(100)',...}
424
+ if set_typ:
425
+ # 更新自定义的列数据类型
426
+ for k, v in dtypes.items():
427
+ # 确保传进来的 set_typ 键存在于实际的 df 列才 update
428
+ [dtypes.update({k: inside_v}) for inside_k, inside_v in set_typ.items() if k == inside_k]
429
+
430
+ # 检查列
431
+ sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s;"
432
+ cursor.execute(sql, (db_name, table_name))
433
+ col_exist = [item['COLUMN_NAME'] for item in cursor.fetchall()] # 已存在的所有列
434
+ col_not_exist = [col for col in dict_data.keys() if col not in col_exist] # 不存在的列
435
+ # 不存在则新建列
436
+ if col_not_exist: # 数据表中不存在的列
437
+ for col in col_not_exist:
438
+ # 创建列,需转义
439
+ if allow_not_null:
440
+ sql = f"ALTER TABLE `{table_name}` ADD COLUMN `{col}` {dtypes[col]};"
441
+ else:
442
+ sql = f"ALTER TABLE `{table_name}` ADD COLUMN `{col}` {dtypes[col]} NOT NULL;"
443
+ # sql = f"ALTER TABLE `{table_name}` ADD COLUMN `{col}` {dtypes[col]} NOT NULL;"
444
+ # print(sql)
445
+ cursor.execute(sql)
446
+ print(f"添加列: {col}({dtypes[col]})") # 添加列并指定数据类型
447
+
448
+ if col in main_key or col == '日期':
449
+ sql = f"CREATE INDEX index_name ON `{table_name}`(`{col}`);"
450
+ print(f"设置为索引: {col}({dtypes[col]})")
451
+ cursor.execute(sql)
452
+ if col in unique_main_key:
453
+ if dtypes[col] == 'mediumtext':
454
+ sql = f"ALTER TABLE `{table_name}` ADD UNIQUE (`{col}`({index_length}))"
455
+ else:
456
+ sql = f"ALTER TABLE `{table_name}` ADD UNIQUE (`{col}`)"
457
+ cursor.execute(sql)
458
+ # if col in main_key or col in unique_main_key:
459
+ # sql = f"SHOW INDEXES FROM `{table_name}` WHERE `Column_name` = %s"
460
+ # cursor.execute(sql, (col))
461
+ # result = cursor.fetchone() # 检查索引是否存在
462
+ # if not result:
463
+ # if col in main_key:
464
+ # sql = f"CREATE INDEX index_name ON `{table_name}`(`{col}`);"
465
+ # print(f"设置为索引: {col}({dtypes[col]})")
466
+ # cursor.execute(sql)
467
+ # elif col in unique_main_key:
468
+ # if dtypes[col] == 'mediumtext':
469
+ # sql = f"CREATE INDEX UNIQUE index_name ON `{table_name}` (`{col}`({index_length}));"
470
+ # else:
471
+ # sql = f"CREATE INDEX UNIQUE index_name ON `{table_name}` (`{col}`);"
472
+ # print(f"设置唯一索引: {col}({dtypes[col]})")
473
+ # print(sql)
474
+ # cursor.execute(sql)
475
+ connection.commit() # 提交事务
476
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
477
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
478
+ # 处理插入的数据
479
+ for dict_data in dict_data_list:
480
+ dtypes, dict_data = self.cover_dict_dtypes(dict_data=dict_data) # {'店铺名称': 'varchar(100)',...}
481
+ if icm_update:
482
+ """ 使用增量更新: 需确保 icm_update['主键'] 传进来的列组合是数据表中唯一,值不会发生变化且不会重复,否则可能产生覆盖 """
483
+ sql = 'SELECT COLUMN_NAME FROM information_schema.columns WHERE table_schema = %s AND table_name = %s'
484
+ cursor.execute(sql, (db_name, {table_name}))
485
+ columns = cursor.fetchall()
486
+ cols_exist = [col['COLUMN_NAME'] for col in columns] # 数据表的所有列, 返回 list
487
+ update_col = [item for item in cols_exist if item not in icm_update and item != 'id'] # 除了主键外的其他列
488
+
489
+ # unique_keys 示例: `日期`, `余额`
490
+ unique_keys = ', '.join(f"`{item}`" for item in update_col) # 列名需要转义
491
+ condition = []
492
+ for up_col in icm_update:
493
+ condition += [f'`{up_col}` = "{dict_data[up_col]}"']
494
+ condition = ' AND '.join(condition) # condition值示例: `品销宝余额` = '2930.73' AND `短信剩余` = '67471'
495
+ sql = f"SELECT {unique_keys} FROM `{table_name}` WHERE {condition}"
496
+ # print(sql)
497
+ # sql = f"SELECT {unique_keys} FROM `{table_name}` WHERE `创建时间` = '2014-09-19 14:32:33'"
498
+ cursor.execute(sql)
499
+ results = cursor.fetchall() # results 是数据库取出的数据
500
+ if results: # 有数据返回,再进行增量检查
501
+ for result in results: # results 是数据库数据, dict_data 是传进来的数据
502
+ change_col = [] # 发生变化的列名
503
+ change_values = [] # 发生变化的数据
504
+ for col in update_col:
505
+ # 因为 mysql 里面有 decimal 数据类型,要移除末尾的 0 再做比较(df 默认将 5.00 小数截断为 5.0)
506
+ df_value = str(dict_data[col])
507
+ mysql_value = str(result[col])
508
+ if '.' in df_value:
509
+ df_value = re.sub(r'0+$', '', df_value)
510
+ df_value = re.sub(r'\.$', '', df_value)
511
+ if '.' in mysql_value:
512
+ mysql_value = re.sub(r'0+$', '', mysql_value)
513
+ mysql_value = re.sub(r'\.$', '', mysql_value)
514
+ if df_value != mysql_value: # 传进来的数据和数据库比较, 有变化
515
+ # print(f'{dict_data['日期']}{dict_data['商品id']}{col} 列的值有变化,{str(dict_data[col])} != {str(result[col])}')
516
+ change_values += [f"`{col}` = \"{str(dict_data[col])}\""]
517
+ change_col.append(col)
518
+ not_change_col = [item for item in update_col if item not in change_col]
519
+ # change_values 是 df 传进来且和数据库对比后,发生了变化的数据,值示例: [`品销宝余额` = '9999.0', `短信剩余` = '888']
520
+ if change_values: # change_values 有数据返回,表示值需要更新
521
+ if not_change_col:
522
+ not_change_values = [f'`{col}` = "{str(dict_data[col])}"' for col in not_change_col]
523
+ not_change_values = ' AND '.join(
524
+ not_change_values) # 示例: `短信剩余` = '888' AND `test1` = '93'
525
+ # print(change_values, not_change_values)
526
+ condition += f' AND {not_change_values}' # 重新构建完整的查询条件,将未发生变化的列加进查询条件
527
+ change_values = ', '.join(f"{item}" for item in change_values) # 注意这里 item 外面没有反引号
528
+ sql = "UPDATE `%s` SET %s WHERE %s" % (table_name, change_values, condition)
529
+ # print(sql)
530
+ cursor.execute(sql)
531
+ else: # 没有数据返回,则直接插入数据
532
+ cols = ', '.join(f"`{item}`" for item in dict_data.keys()) # 列名需要转义
533
+ # data.update({item: f"{data[item]}" for item in data.keys()}) # 全部值转字符, 不是必须的
534
+ values = ', '.join([f'"{item}"' for item in dict_data.values()]) # 值要加引号
535
+ sql = f"INSERT INTO `{table_name}` ({cols}) VALUES ({values});"
536
+ cursor.execute(sql)
537
+ connection.commit() # 提交数据库
538
+ connection.close()
539
+ return
540
+
541
+ # 构建 keys
542
+ keys_data = ', '.join([f'`{str(item)}`' for item in dict_data.keys()])
543
+ # 构建 values
544
+ values_data = ', '.join(f'"{str(item)}"' for item in dict_data.values())
545
+ # 构建其他键值,重复时要更新的其他键
546
+ if main_key:
547
+ for col in main_key:
548
+ del dict_data[col]
549
+ if unique_main_key:
550
+ for col in unique_main_key:
551
+ del dict_data[col]
552
+ # 涉及列名务必使用反引号
553
+ update_datas = ', '.join([f'`{k}` = VALUES(`{k}`)' for k, v in dict_data.items()])
554
+
555
+ # 构建 sql
556
+ sql = f"INSERT INTO %s (%s) VALUES (%s) ON DUPLICATE KEY UPDATE %s" % (table_name, keys_data, values_data, update_datas)
557
+ # print(sql)
558
+ cursor.execute(sql)
559
+ connection.commit() # 提交数据库
560
+ connection.close()
561
+
347
562
  @try_except
348
563
  def dict_to_mysql(self, db_name, table_name, dict_data, icm_update=None, main_key=None, unique_main_key=None, index_length=100, set_typ=None, allow_not_null=False, cut_data=None):
349
564
  """
@@ -1086,7 +1301,6 @@ class MysqlUpload:
1086
1301
  print(f'{now} 写入本地文件: ({self.host}:{self.port}) {db_name}/{table_name} -> {os.path.join(save_path, filename)}')
1087
1302
  connection.close()
1088
1303
 
1089
-
1090
1304
  def read_mysql(self, table_name, start_date, end_date, db_name='远程数据源', date_name='日期'):
1091
1305
  """ 读取指定数据表,可指定日期范围,返回结果: df """
1092
1306
  start_date = pd.to_datetime(start_date).strftime('%Y-%m-%d')
mdbq/mysql/s_query.py CHANGED
@@ -11,7 +11,6 @@ import pandas as pd
11
11
  from sqlalchemy import create_engine
12
12
  import os
13
13
  import calendar
14
- from mdbq.config import get_myconf
15
14
  from mdbq.dataframe import converter
16
15
 
17
16
  warnings.filterwarnings('ignore')
mdbq/spider/aikucun.py CHANGED
@@ -401,53 +401,29 @@ class AikuCun:
401
401
  '成交gmv': '',
402
402
  '支付人数_成交': '',
403
403
  }
404
+ _results = []
404
405
  for dict_data in df.to_dict(orient='records'):
405
406
  new_dict.update(dict_data)
406
407
  new_dict.update({'更新时间': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')})
407
- m_engine.dict_to_mysql(
408
+ _results.append(new_dict)
409
+ if _results:
410
+ m_engine.insert_many_dict(
408
411
  db_name='爱库存2',
409
412
  table_name='商品spu榜单',
410
- dict_data=new_dict,
413
+ dict_data_list=_results,
411
414
  icm_update=['日期', '店铺名称', 'spu_id', '商品款号'],
412
415
  unique_main_key=None,
413
416
  set_typ=set_typ,
414
417
  )
415
- company_engine.dict_to_mysql(
418
+ company_engine.insert_many_dict(
416
419
  db_name='爱库存2',
417
420
  table_name='商品spu榜单',
418
- dict_data=new_dict,
421
+ dict_data_list=_results,
419
422
  icm_update=['日期', '店铺名称', 'spu_id', '商品款号'],
420
423
  unique_main_key=None,
421
424
  set_typ=set_typ,
422
425
  )
423
426
 
424
- # m_engine.df_to_mysql(
425
- # df=df,
426
- # db_name='爱库存2',
427
- # table_name='商品spu榜单',
428
- # icm_update=[], # 增量更新, 在聚合数据中使用,其他不要用
429
- # move_insert=False, # 先删除,再插入
430
- # df_sql=True, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
431
- # drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
432
- # count=None,
433
- # filename=None, # 用来追踪处理进度
434
- # reset_id=False, # 是否重置自增列
435
- # set_typ=set_typ,
436
- # )
437
- # company_engine.df_to_mysql(
438
- # df=df,
439
- # db_name='爱库存2',
440
- # table_name='商品spu榜单',
441
- # icm_update=[], # 增量更新, 在聚合数据中使用,其他不要用
442
- # move_insert=False, # 先删除,再插入
443
- # df_sql=True, # 值为 True 时使用 df.to_sql 函数上传整个表, 不会排重
444
- # drop_duplicates=False, # 值为 True 时检查重复数据再插入,反之直接上传,会比较慢
445
- # count=None,
446
- # filename=None, # 用来追踪处理进度
447
- # reset_id=False, # 是否重置自增列
448
- # set_typ=set_typ,
449
- # )
450
-
451
427
  new_name = f'爱库存_商品榜单_spu_{date}_{date}.csv'
452
428
  df.to_csv(os.path.join(root, new_name), encoding='utf-8_sig', index=False)
453
429
  os.remove(os.path.join(root, name))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 3.3.7
3
+ Version: 3.3.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 @@ mdbq/__version__.py,sha256=y9Mp_8x0BCZSHsdLT_q5tX9wZwd5QgqrSIENLrb6vXA,62
3
3
  mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
4
4
  mdbq/aggregation/aggregation.py,sha256=-yzApnlqSN2L0E1YMu5ml-W827qpKQvWPCOI7jj2kzY,80264
5
5
  mdbq/aggregation/optimize_data.py,sha256=RXIv7cACCgYyehAxMjUYi_S7rVyjIwXKWMaM3nduGtA,3068
6
- mdbq/aggregation/query_data.py,sha256=_5mnSFHV6xAFs_1YF_H2zMOdJeMavgga4lZQ_qpqxPQ,167637
6
+ mdbq/aggregation/query_data.py,sha256=o23iwJJSYkBz96iIaQVGq3tVY8ko9xuk3YjVnSNVIxE,166436
7
7
  mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
8
8
  mdbq/bdup/bdup.py,sha256=LAV0TgnQpc-LB-YuJthxb0U42_VkPidzQzAagan46lU,4234
9
9
  mdbq/config/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
@@ -17,9 +17,9 @@ mdbq/log/mylogger.py,sha256=oaT7Bp-Hb9jZt52seP3ISUuxVcI19s4UiqTeouScBO0,3258
17
17
  mdbq/mongo/__init__.py,sha256=SILt7xMtQIQl_m-ik9WLtJSXIVf424iYgCfE_tnQFbw,13
18
18
  mdbq/mongo/mongo.py,sha256=M9DUeUCMPDngkwn9-ui0uTiFrvfNU1kLs22s5SmoNm0,31899
19
19
  mdbq/mysql/__init__.py,sha256=A_DPJyAoEvTSFojiI2e94zP0FKtCkkwKP1kYUCSyQzo,11
20
- mdbq/mysql/mysql.py,sha256=ZK6E-idQWrURtoimc0uG8B1tnhtSFQXDJHfu8sWeJg4,85675
20
+ mdbq/mysql/mysql.py,sha256=Ekqg-svOi2kbPIBBoEtL9Eg4-LJqyqoLprSSUy17MWU,99360
21
21
  mdbq/mysql/recheck_mysql.py,sha256=ppBTfBLgkRWirMVZ31e_ZPULiGPJU7K3PP9G6QBZ3QI,8605
22
- mdbq/mysql/s_query.py,sha256=MbIprZ4yJDAZ9AahZPzl7hqS695Vs0P-AJNwAtA_EEc,9287
22
+ mdbq/mysql/s_query.py,sha256=6L5Cp90zq13noZHjzSA5mqms_hD01c8GO1_NfbYDu6w,9252
23
23
  mdbq/mysql/year_month_day.py,sha256=VgewoE2pJxK7ErjfviL_SMTN77ki8GVbTUcao3vFUCE,1523
24
24
  mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
25
25
  mdbq/other/download_sku_picture.py,sha256=Z2Crtwsv69nMGN8uw7qea_1HghRwil3vfnczBM6Ab80,45879
@@ -32,8 +32,8 @@ mdbq/pbix/pbix_refresh.py,sha256=JUjKW3bNEyoMVfVfo77UhguvS5AWkixvVhDbw4_MHco,239
32
32
  mdbq/pbix/refresh_all.py,sha256=OBT9EewSZ0aRS9vL_FflVn74d4l2G00wzHiikCC4TC0,5926
33
33
  mdbq/pbix/refresh_all_old.py,sha256=_pq3WSQ728GPtEG5pfsZI2uTJhU8D6ra-htIk1JXYzw,7192
34
34
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
35
- mdbq/spider/aikucun.py,sha256=UFY-TwlvquEYK58rTdRuv5Wx3KA21m-bIrwvvfPRyOk,23749
36
- mdbq-3.3.7.dist-info/METADATA,sha256=aMT3CEx_q-0vG6CncxkAXv1PPk2RsieIZxrkYyk1jPE,243
37
- mdbq-3.3.7.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
38
- mdbq-3.3.7.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
39
- mdbq-3.3.7.dist-info/RECORD,,
35
+ mdbq/spider/aikucun.py,sha256=zOacjrJ3MvToyuugA68xB-oN6RKj8K3GxMKudnln9EA,22207
36
+ mdbq-3.3.9.dist-info/METADATA,sha256=Hxz93TyF4f66Q4saABFf4zFEuQGP97GzJMTB35-caLE,243
37
+ mdbq-3.3.9.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
38
+ mdbq-3.3.9.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
39
+ mdbq-3.3.9.dist-info/RECORD,,
File without changes