mdbq 3.8.12__py3-none-any.whl → 3.8.13__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.
mdbq/__version__.py CHANGED
@@ -1 +1 @@
1
- VERSION = '3.8.12'
1
+ VERSION = '3.8.13'
mdbq/mysql/mysql.py CHANGED
@@ -354,23 +354,6 @@ class MysqlUpload:
354
354
  else:
355
355
  sql = f"ALTER TABLE `{table_name}` ADD UNIQUE (`{col}`)"
356
356
  cursor.execute(sql)
357
- # if col in main_key or col in unique_main_key:
358
- # sql = f"SHOW INDEXES FROM `{table_name}` WHERE `Column_name` = %s"
359
- # cursor.execute(sql, (col))
360
- # result = cursor.fetchone() # 检查索引是否存在
361
- # if not result:
362
- # if col in main_key:
363
- # sql = f"CREATE INDEX index_name ON `{table_name}`(`{col}`);"
364
- # logger.info(f"设置为索引: {col}({dtypes[col]})")
365
- # cursor.execute(sql)
366
- # elif col in unique_main_key:
367
- # if dtypes[col] == 'mediumtext':
368
- # sql = f"CREATE INDEX UNIQUE index_name ON `{table_name}` (`{col}`({index_length}));"
369
- # else:
370
- # sql = f"CREATE INDEX UNIQUE index_name ON `{table_name}` (`{col}`);"
371
- # logger.info(f"设置唯一索引: {col}({dtypes[col]})")
372
- # logger.info(sql)
373
- # cursor.execute(sql)
374
357
  connection.commit() # 提交事务
375
358
  """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
376
359
  """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
@@ -429,11 +412,23 @@ class MysqlUpload:
429
412
  # logger.info(sql)
430
413
  cursor.execute(sql)
431
414
  else: # 没有数据返回,则直接插入数据
432
- cols = ', '.join(f"`{item}`" for item in dict_data.keys()) # 列名需要转义
433
- # data.update({item: f"{data[item]}" for item in data.keys()}) # 全部值转字符, 不是必须的
434
- values = ', '.join([f'"{item}"' for item in dict_data.values()]) # 值要加引号
435
- sql = f"INSERT INTO `{table_name}` ({cols}) VALUES ({values});"
436
- cursor.execute(sql)
415
+ # cols = ', '.join(f"`{item}`" for item in dict_data.keys()) # 列名需要转义
416
+ # # data.update({item: f"{data[item]}" for item in data.keys()}) # 全部值转字符, 不是必须的
417
+ # values = ', '.join([f'"{item}"' for item in dict_data.values()]) # 值要加引号
418
+ # sql = f"INSERT INTO `{table_name}` ({cols}) VALUES ({values});"
419
+ # cursor.execute(sql)
420
+
421
+ # 清理和验证列名
422
+ safe_columns = [f"`{escape_string(str(col))}`" for col in dict_data.keys()]
423
+ cols = ", ".join(safe_columns)
424
+ # 使用参数化查询
425
+ placeholders = ", ".join(["%s"] * len(dict_data))
426
+ sql = f"INSERT INTO `{table_name}` ({cols}) VALUES ({placeholders})"
427
+ # 转义值并作为参数传递
428
+ escaped_values = [escape_string(str(v)) if isinstance(v, str) else v for v in
429
+ dict_data.values()]
430
+ cursor.execute(sql, tuple(escaped_values))
431
+
437
432
  connection.commit() # 提交数据库
438
433
  continue
439
434
 
@@ -559,23 +554,6 @@ class MysqlUpload:
559
554
  else:
560
555
  sql = f"ALTER TABLE `{table_name}` ADD UNIQUE (`{col}`)"
561
556
  cursor.execute(sql)
562
- # if col in main_key or col in unique_main_key:
563
- # sql = f"SHOW INDEXES FROM `{table_name}` WHERE `Column_name` = %s"
564
- # cursor.execute(sql, (col))
565
- # result = cursor.fetchone() # 检查索引是否存在
566
- # if not result:
567
- # if col in main_key:
568
- # sql = f"CREATE INDEX index_name ON `{table_name}`(`{col}`);"
569
- # logger.info(f"设置为索引: {col}({dtypes[col]})")
570
- # cursor.execute(sql)
571
- # elif col in unique_main_key:
572
- # if dtypes[col] == 'mediumtext':
573
- # sql = f"CREATE INDEX UNIQUE index_name ON `{table_name}` (`{col}`({index_length}));"
574
- # else:
575
- # sql = f"CREATE INDEX UNIQUE index_name ON `{table_name}` (`{col}`);"
576
- # logger.info(f"设置唯一索引: {col}({dtypes[col]})")
577
- # logger.info(sql)
578
- # cursor.execute(sql)
579
557
  connection.commit() # 提交事务
580
558
  """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
581
559
  """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
@@ -631,11 +609,22 @@ class MysqlUpload:
631
609
  # logger.info(sql)
632
610
  cursor.execute(sql)
633
611
  else: # 没有数据返回,则直接插入数据
634
- cols = ', '.join(f"`{item}`" for item in dict_data.keys()) # 列名需要转义
635
- # data.update({item: f"{data[item]}" for item in data.keys()}) # 全部值转字符, 不是必须的
636
- values = ', '.join([f'"{item}"' for item in dict_data.values()]) # 值要加引号
637
- sql = f"INSERT INTO `{table_name}` ({cols}) VALUES ({values});"
638
- cursor.execute(sql)
612
+ # cols = ', '.join(f"`{item}`" for item in dict_data.keys()) # 列名需要转义
613
+ # # data.update({item: f"{data[item]}" for item in data.keys()}) # 全部值转字符, 不是必须的
614
+ # values = ', '.join([f'"{item}"' for item in dict_data.values()]) # 值要加引号
615
+ # sql = f"INSERT INTO `{table_name}` ({cols}) VALUES ({values});"
616
+ # cursor.execute(sql)
617
+
618
+ # 构建安全的INSERT语句
619
+ safe_keys = [f"`{escape_string(str(k))}`" for k in dict_data.keys()]
620
+ keys_data = ", ".join(safe_keys)
621
+ placeholders = ", ".join(["%s"] * len(dict_data))
622
+
623
+ # 使用参数化查询
624
+ sql = f"INSERT INTO `{table_name}` ({keys_data}) VALUES ({placeholders}) ON DUPLICATE KEY UPDATE {update_datas}"
625
+ escaped_values = [escape_string(str(v)) if isinstance(v, str) else v for v in dict_data.values()]
626
+ cursor.execute(sql, tuple(escaped_values))
627
+
639
628
  connection.commit() # 提交数据库
640
629
  connection.close()
641
630
  return
@@ -677,9 +666,8 @@ class MysqlUpload:
677
666
  if str(v) == '':
678
667
  v = 0
679
668
  v = str(v)
680
- # v = re.sub('^-$|^--$|^nan$|^null$', '0', v, re.I)
681
- # v = re.sub(',|="|"', '', v, re.I)
682
669
  v = re.sub('^="|"$', '', v, re.I)
670
+ v = re.sub(r'[\x00-\x1F\x7F-\x9F]', '', str(v)) # 移除控制字符
683
671
  if re.findall(r'^[-+]?\d+\.?\d*%$', v):
684
672
  v = str(float(v.rstrip("%")) / 100)
685
673
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 3.8.12
3
+ Version: 3.8.13
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1,5 +1,5 @@
1
1
  mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
2
- mdbq/__version__.py,sha256=Z4fNVSgyq1SukYbN9PNs-2zCbMVcI9eO75ErgL1qq4w,18
2
+ mdbq/__version__.py,sha256=cmqMpHGJCaMGsHUAVyC67-oQIJBBnfayuPIXO2haNMo,18
3
3
  mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
4
4
  mdbq/aggregation/query_data.py,sha256=9doVoOBEaLyHlT0fVEXpWtwLLV4NhpQs17kHQQ0p3ys,185443
5
5
  mdbq/config/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
@@ -7,7 +7,7 @@ mdbq/config/config.py,sha256=eaTfrfXQ65xLqjr5I8-HkZd_jEY1JkGinEgv3TSLeoQ,3170
7
7
  mdbq/log/__init__.py,sha256=Mpbrav0s0ifLL7lVDAuePEi1hJKiSHhxcv1byBKDl5E,15
8
8
  mdbq/log/spider_logging.py,sha256=-ozWWEGm3HVv604ozs_OOvVwumjokmUPwbaodesUrPY,1664
9
9
  mdbq/mysql/__init__.py,sha256=A_DPJyAoEvTSFojiI2e94zP0FKtCkkwKP1kYUCSyQzo,11
10
- mdbq/mysql/mysql.py,sha256=bYwzqB3oMUbTRlIWUdZCXso9oll1vHbcNvvBzT3AsKA,78967
10
+ mdbq/mysql/mysql.py,sha256=xCWY-np41FE1yrQqVWs0AzKZK9DHDFlZ_gbnog5LaNY,77860
11
11
  mdbq/mysql/s_query.py,sha256=X055aLRAgxVvueXx4NbfNjp6MyBI02_XBb1pTKw09L0,8660
12
12
  mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
13
13
  mdbq/other/download_sku_picture.py,sha256=YU8DxKMXbdeE1OOKEA848WVp62jYHw5O4tXTjUdq9H0,44832
@@ -21,7 +21,7 @@ mdbq/redis/__init__.py,sha256=YtgBlVSMDphtpwYX248wGge1x-Ex_mMufz4-8W0XRmA,12
21
21
  mdbq/redis/getredis.py,sha256=Uk8-cOWT0JU1qRyIVqdbYokSLvkDIAfcokmYj1ebw8k,24104
22
22
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
23
23
  mdbq/spider/aikucun.py,sha256=m7ZIvrc9pqoGCYEH3FtgKTwqhX7QB6qzgc2twDzhX4w,19962
24
- mdbq-3.8.12.dist-info/METADATA,sha256=IkddKvTvsNeBEFDqgpNfJOcJj0kkOy1TFt6wKoNiQYw,364
25
- mdbq-3.8.12.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
26
- mdbq-3.8.12.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
27
- mdbq-3.8.12.dist-info/RECORD,,
24
+ mdbq-3.8.13.dist-info/METADATA,sha256=HEw9yfBRwMt6PWbT5Mr1O6pwyYaZVKCT0Yf6qt8hrzU,364
25
+ mdbq-3.8.13.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
26
+ mdbq-3.8.13.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
27
+ mdbq-3.8.13.dist-info/RECORD,,
File without changes