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 +1 -1
- mdbq/mysql/mysql.py +34 -46
- {mdbq-3.8.12.dist-info → mdbq-3.8.13.dist-info}/METADATA +1 -1
- {mdbq-3.8.12.dist-info → mdbq-3.8.13.dist-info}/RECORD +6 -6
- {mdbq-3.8.12.dist-info → mdbq-3.8.13.dist-info}/WHEEL +0 -0
- {mdbq-3.8.12.dist-info → mdbq-3.8.13.dist-info}/top_level.txt +0 -0
mdbq/__version__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
VERSION = '3.8.
|
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,5 +1,5 @@
|
|
1
1
|
mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
|
2
|
-
mdbq/__version__.py,sha256=
|
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=
|
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.
|
25
|
-
mdbq-3.8.
|
26
|
-
mdbq-3.8.
|
27
|
-
mdbq-3.8.
|
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
|
File without changes
|