mdbq 4.0.41__tar.gz → 4.0.42__tar.gz

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.
Files changed (36) hide show
  1. {mdbq-4.0.41 → mdbq-4.0.42}/PKG-INFO +1 -1
  2. mdbq-4.0.42/mdbq/__version__.py +1 -0
  3. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/mysql/uploader.py +66 -0
  4. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq.egg-info/PKG-INFO +1 -1
  5. mdbq-4.0.41/mdbq/__version__.py +0 -1
  6. {mdbq-4.0.41 → mdbq-4.0.42}/README.txt +0 -0
  7. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/__init__.py +0 -0
  8. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/aggregation/__init__.py +0 -0
  9. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/aggregation/query_data.py +0 -0
  10. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/log/__init__.py +0 -0
  11. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/log/mylogger.py +0 -0
  12. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/myconf/__init__.py +0 -0
  13. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/myconf/myconf.py +0 -0
  14. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/mysql/__init__.py +0 -0
  15. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/mysql/deduplicator.py +0 -0
  16. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/mysql/mysql.py +0 -0
  17. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/mysql/s_query.py +0 -0
  18. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/mysql/unique_.py +0 -0
  19. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/other/__init__.py +0 -0
  20. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/other/download_sku_picture.py +0 -0
  21. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/other/error_handler.py +0 -0
  22. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/other/otk.py +0 -0
  23. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/other/pov_city.py +0 -0
  24. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/other/ua_sj.py +0 -0
  25. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/pbix/__init__.py +0 -0
  26. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/pbix/pbix_refresh.py +0 -0
  27. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/pbix/refresh_all.py +0 -0
  28. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/redis/__init__.py +0 -0
  29. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/redis/getredis.py +0 -0
  30. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/spider/__init__.py +0 -0
  31. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq/spider/aikucun.py +0 -0
  32. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq.egg-info/SOURCES.txt +0 -0
  33. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq.egg-info/dependency_links.txt +0 -0
  34. {mdbq-4.0.41 → mdbq-4.0.42}/mdbq.egg-info/top_level.txt +0 -0
  35. {mdbq-4.0.41 → mdbq-4.0.42}/setup.cfg +0 -0
  36. {mdbq-4.0.41 → mdbq-4.0.42}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 4.0.41
3
+ Version: 4.0.42
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -0,0 +1 @@
1
+ VERSION = '4.0.42'
@@ -516,6 +516,18 @@ class MySQLUploader:
516
516
  :return: 标准化后的日期时间字符串或日期对象
517
517
  :raises ValueError: 当日期格式无效时抛出
518
518
  """
519
+ # 处理 pandas Timestamp 对象
520
+ if hasattr(value, 'strftime'):
521
+ # 如果是 Timestamp 或 datetime 对象,直接格式化
522
+ if date_type:
523
+ return pd.to_datetime(value.strftime('%Y-%m-%d'))
524
+ else:
525
+ return value.strftime('%Y-%m-%d %H:%M:%S')
526
+
527
+ # 确保 value 是字符串
528
+ if not isinstance(value, str):
529
+ value = str(value)
530
+
519
531
  formats = [
520
532
  '%Y-%m-%d %H:%M:%S',
521
533
  '%Y-%m-%d',
@@ -564,6 +576,24 @@ class MySQLUploader:
564
576
  # 数值类型验证
565
577
  elif 'int' in column_type_lower:
566
578
  try:
579
+ # 安全地处理各种数值类型
580
+ if hasattr(value, 'item') and callable(getattr(value, 'item', None)):
581
+ # numpy 标量类型
582
+ try:
583
+ value = value.item()
584
+ except (ValueError, TypeError):
585
+ # 如果不是标量,保持原值
586
+ pass
587
+ elif hasattr(value, 'value') and not isinstance(value, str):
588
+ # pandas 或其他有 value 属性的对象
589
+ try:
590
+ extracted_value = value.value
591
+ # 验证提取的值是数值类型
592
+ if isinstance(extracted_value, (int, float, str)) and str(extracted_value).replace('.', '').replace('-', '').isdigit():
593
+ value = extracted_value
594
+ except (ValueError, TypeError, AttributeError):
595
+ # 如果提取失败,保持原值
596
+ pass
567
597
  return int(value)
568
598
  except (ValueError, TypeError):
569
599
  logger.error(f"值 `{value}` 无法转换为整数", {"库": db_name, "表": table_name, "列": col_name})
@@ -587,12 +617,48 @@ class MySQLUploader:
587
617
  # 检查是否为Decimal类型
588
618
  if 'decimal' in column_type_lower:
589
619
  precision, scale = self._get_decimal_scale(column_type)
620
+ # 安全地处理各种数值类型
621
+ if hasattr(value, 'item') and callable(getattr(value, 'item', None)):
622
+ # numpy 标量类型
623
+ try:
624
+ value = value.item()
625
+ except (ValueError, TypeError):
626
+ # 如果不是标量,保持原值
627
+ pass
628
+ elif hasattr(value, 'value') and not isinstance(value, str):
629
+ # pandas 或其他有 value 属性的对象
630
+ try:
631
+ extracted_value = value.value
632
+ # 验证提取的值是数值类型
633
+ if isinstance(extracted_value, (int, float, str)) and str(extracted_value).replace('.', '').replace('-', '').replace('e', '').replace('E', '').isdigit():
634
+ value = extracted_value
635
+ except (ValueError, TypeError, AttributeError):
636
+ # 如果提取失败,保持原值
637
+ pass
590
638
  value_decimal = Decimal(str(value))
591
639
  # 检查整数部分长度
592
640
  if len(value_decimal.as_tuple().digits) - abs(value_decimal.as_tuple().exponent) > precision - scale:
593
641
  raise ValueError(f"整数部分超出范围")
594
642
  return value_decimal
595
643
  else: # float/double
644
+ # 安全地处理各种数值类型
645
+ if hasattr(value, 'item') and callable(getattr(value, 'item', None)):
646
+ # numpy 标量类型
647
+ try:
648
+ value = value.item()
649
+ except (ValueError, TypeError):
650
+ # 如果不是标量,保持原值
651
+ pass
652
+ elif hasattr(value, 'value') and not isinstance(value, str):
653
+ # pandas 或其他有 value 属性的对象
654
+ try:
655
+ extracted_value = value.value
656
+ # 验证提取的值是数值类型
657
+ if isinstance(extracted_value, (int, float, str)) and str(extracted_value).replace('.', '').replace('-', '').replace('e', '').replace('E', '').isdigit():
658
+ value = extracted_value
659
+ except (ValueError, TypeError, AttributeError):
660
+ # 如果提取失败,保持原值
661
+ pass
596
662
  return float(value)
597
663
  except (ValueError, TypeError, InvalidOperation) as e:
598
664
  logger.error(f"值 `{value}` 无法转换为数值类型: {e}", {"库": db_name, "表": table_name, "列": col_name})
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 4.0.41
3
+ Version: 4.0.42
4
4
  Home-page: https://pypi.org/project/mdbq
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1 +0,0 @@
1
- VERSION = '4.0.41'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes