mdbq 4.0.45__py3-none-any.whl → 4.0.46__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 = '4.0.45'
1
+ VERSION = '4.0.46'
@@ -24,7 +24,7 @@ host, port, username, password = parser.get_section_values(
24
24
  section='mysql',
25
25
  keys=['host', 'port', 'username', 'password'],
26
26
  )
27
- host = 'localhost'
27
+ # host = 'localhost'
28
28
  uld = uploader.MySQLUploader(username=username, password=password, host=host, port=int(port), pool_size=10)
29
29
 
30
30
  logger = mylogger.MyLogger(
@@ -2270,7 +2270,7 @@ class MysqlDatasQuery:
2270
2270
  '日期': 'date',
2271
2271
  '店铺名称': 'varchar(100)',
2272
2272
  '词类型': 'varchar(100)',
2273
- '搜索词': 'varchar(100)',
2273
+ '搜索词': 'varchar(255)',
2274
2274
  '访客数': 'int',
2275
2275
  '加购人数': 'int',
2276
2276
  '支付金额': 'decimal(10,2)',
mdbq/mysql/uploader.py CHANGED
@@ -625,11 +625,45 @@ class MySQLUploader:
625
625
  根据列类型验证并转换数据值
626
626
  """
627
627
  column_type_lower = column_type.lower() if column_type else ''
628
- # 统一判断None/NaN
628
+
629
+ # JSON类型验证和转换(优先处理,避免pd.isna的问题)
630
+ if 'json' in column_type_lower:
631
+ if isinstance(value, (dict, list)):
632
+ try:
633
+ import json
634
+ return json.dumps(value, ensure_ascii=False)
635
+ except (TypeError, ValueError) as e:
636
+ logger.error(f"JSON序列化失败: {e}", {"库": db_name, "表": table_name, "列": col_name, "值": value})
637
+ raise ValueError(f"JSON序列化失败: {e}")
638
+ elif isinstance(value, str):
639
+ # 验证字符串是否为有效的JSON
640
+ try:
641
+ import json
642
+ json.loads(value)
643
+ return value
644
+ except (TypeError, ValueError) as e:
645
+ logger.error(f"无效的JSON字符串: {e}", {"库": db_name, "表": table_name, "列": col_name, "值": value})
646
+ raise ValueError(f"无效的JSON字符串: {e}")
647
+ else:
648
+ # 其他类型转换为字符串
649
+ return str(value)
650
+
651
+ # 统一判断None/NaN(排除列表和字典类型)
629
652
  if value == '':
630
653
  if any(t in column_type_lower for t in ['varchar', 'text', 'char', 'mediumtext', 'longtext']):
631
654
  return ""
632
- if value == '' or pd.isna(value) or (isinstance(value, (float, Decimal)) and math.isinf(value)):
655
+
656
+ # 安全地检查NaN值,避免对列表和字典使用pd.isna
657
+ is_nan = False
658
+ if isinstance(value, (list, dict)):
659
+ is_nan = False # 列表和字典不是NaN
660
+ else:
661
+ try:
662
+ is_nan = pd.isna(value) or (isinstance(value, (float, Decimal)) and math.isinf(value))
663
+ except (ValueError, TypeError):
664
+ is_nan = False
665
+
666
+ if value == '' or is_nan:
633
667
  # 兜底填充值映射
634
668
  fallback_map = {
635
669
  'int': 0,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 4.0.45
3
+ Version: 4.0.46
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1,7 +1,7 @@
1
1
  mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
2
- mdbq/__version__.py,sha256=FkR4y0Q2ePf9_DJM8InzWHAQoyH_nonI89ug5PqBPvw,18
2
+ mdbq/__version__.py,sha256=_sPwKl25zozCOVLAfNKDLrJOiNvhHbBB2Oh22FfZsGk,18
3
3
  mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
4
- mdbq/aggregation/query_data.py,sha256=V67KBQNNK8Ayhqrgg8GGf8HGW0H8owjbbiwt07b1Qkw,170092
4
+ mdbq/aggregation/query_data.py,sha256=gQUcdrK0QCA0nEBkRA9zBieRWqSnkvpV5Eb-hXKw9Y8,170094
5
5
  mdbq/log/__init__.py,sha256=Mpbrav0s0ifLL7lVDAuePEi1hJKiSHhxcv1byBKDl5E,15
6
6
  mdbq/log/mylogger.py,sha256=kPe3wsQNaB1slfX-Z7VMqzZoMoqPfc7ylYXZDBeFzzI,24945
7
7
  mdbq/myconf/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
@@ -11,7 +11,7 @@ mdbq/mysql/deduplicator.py,sha256=AB3gL7ZwhcmzGHSu4UY4M6YZVPFZ2wlAN3BCcwAhegQ,73
11
11
  mdbq/mysql/mysql.py,sha256=pDg771xBugCMSTWeskIFTi3pFLgaqgyG3smzf-86Wn8,56772
12
12
  mdbq/mysql/s_query.py,sha256=1wJ3HVjHEF6FA-bVeeesRlsf73CZSvVTEQ51CF1OsE4,46786
13
13
  mdbq/mysql/unique_.py,sha256=MaztT-WIyEQUs-OOYY4pFulgHVcXR1BfCy3QUz0XM_U,21127
14
- mdbq/mysql/uploader.py,sha256=LPfYEj7ywoAynY2Nl9gg0IurgIWd_bTwkda2ifD1TeE,86443
14
+ mdbq/mysql/uploader.py,sha256=NKwuBZcm4597_3gnY9M5m-jnD5joaVjf28twfQfP_jE,87955
15
15
  mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
16
16
  mdbq/other/download_sku_picture.py,sha256=X66sVdvVgzoNzmgVJyPtd7bjEvctEKtLPblEPF65EWc,46940
17
17
  mdbq/other/error_handler.py,sha256=4p5haAXSY-P78stp4Xwo_MwAngWYqyKj5ogWIuYXMeY,12631
@@ -25,7 +25,7 @@ mdbq/redis/__init__.py,sha256=YtgBlVSMDphtpwYX248wGge1x-Ex_mMufz4-8W0XRmA,12
25
25
  mdbq/redis/getredis.py,sha256=vpBuNc22uj9Vr-_Dh25_wpwWM1e-072EAAIBdB_IpL0,23494
26
26
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
27
27
  mdbq/spider/aikucun.py,sha256=XptHjGzbout9IYzWAOQUpMMV5qEgLTU8pL1ZGt8oNEA,21868
28
- mdbq-4.0.45.dist-info/METADATA,sha256=l9QP6JJAwfO9i4vZpq8H6Z89M6VaOL58wotceJ4MaLY,364
29
- mdbq-4.0.45.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
30
- mdbq-4.0.45.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
31
- mdbq-4.0.45.dist-info/RECORD,,
28
+ mdbq-4.0.46.dist-info/METADATA,sha256=gwdYseVCsqG4wlrM-Upti194tEpmc1PB7TKshTGKI30,364
29
+ mdbq-4.0.46.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
30
+ mdbq-4.0.46.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
31
+ mdbq-4.0.46.dist-info/RECORD,,
File without changes