mdbq 3.10.4__py3-none-any.whl → 3.10.6__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.10.4'
1
+ VERSION = '3.10.6'
mdbq/mysql/uploader.py CHANGED
@@ -925,7 +925,6 @@ class MySQLUploader:
925
925
  raise ValueError(f"行:{row_idx}, 列:`{col_name}`-> 报错: {str(e)}")
926
926
  prepared_data.append(prepared_row)
927
927
 
928
- logger.debug(f"已准备 {len(prepared_data)} 行数据")
929
928
  return prepared_data, filtered_set_typ
930
929
 
931
930
  def upload_data(
@@ -961,7 +960,7 @@ class MySQLUploader:
961
960
  :param auto_create: 表不存在时是否自动创建,默认为True
962
961
  :param indexes: 需要创建索引的列列表,可选
963
962
  :param update_on_duplicate: 遇到重复数据时是否更新旧数据(默认为False)
964
- :param transaction_mode: 事务提交模式,可选值:
963
+ :param transaction_mode: 事务模式,可选值:
965
964
  - 'row' : 逐行提交事务(错误隔离性好)
966
965
  - 'batch' : 整批提交事务(性能最优)
967
966
  - 'hybrid' : 混合模式(每N行提交,平衡性能与安全性)
@@ -981,14 +980,11 @@ class MySQLUploader:
981
980
  '分表方式': partition_by,
982
981
  '排重': check_duplicate,
983
982
  '传入': len(data) if hasattr(data, '__len__') else 1,
984
- '自动建表': auto_create
983
+ # '自动建表': auto_create
985
984
  })
986
985
 
987
986
  try:
988
987
  # 验证参数
989
- if not set_typ:
990
- logger.debug(f'set_typ 参数缺失,建表不指定数据类型字典,后续存储数据容易引发异常')
991
-
992
988
  if partition_by:
993
989
  partition_by = str(partition_by).lower()
994
990
  if partition_by not in ['year', 'month']:
@@ -1084,7 +1080,7 @@ class MySQLUploader:
1084
1080
  '库': db_name,
1085
1081
  '表': table_name,
1086
1082
  '批次': batch_id,
1087
- 'success': success_flag,
1083
+ 'finish': success_flag,
1088
1084
  # '耗时': round(time.time() - upload_start, 2),
1089
1085
  '数据行': initial_row_count
1090
1086
  })
@@ -1114,7 +1110,7 @@ class MySQLUploader:
1114
1110
  :param batch_size: 批量插入大小,默认为1000
1115
1111
  :param update_on_duplicate: 遇到重复数据时是否更新旧数据(默认为False)
1116
1112
  :param batch_id: 批次ID用于日志追踪,可选
1117
- :param transaction_mode: 事务提交模式,可选值:
1113
+ :param transaction_mode: 事务模式,可选值:
1118
1114
  - 'row' : 逐行提交事务(错误隔离性好)
1119
1115
  - 'batch' : 整批提交事务(性能最优)
1120
1116
  - 'hybrid' : 混合模式(每N行提交,平衡性能与安全性)
@@ -1143,11 +1139,11 @@ class MySQLUploader:
1143
1139
  logger.info('插入完成', {
1144
1140
  '库': db_name,
1145
1141
  '表': table_name,
1146
- '完成总计': len(data),
1142
+ '总计': len(data),
1147
1143
  '插入': total_inserted,
1148
1144
  '跳过': total_skipped,
1149
1145
  '失败': total_failed,
1150
- '事务提交模式': transaction_mode,
1146
+ '事务模式': transaction_mode,
1151
1147
  })
1152
1148
 
1153
1149
  def _validate_transaction_mode(self, mode: str) -> str:
@@ -1223,6 +1219,25 @@ class MySQLUploader:
1223
1219
  """
1224
1220
  return sql
1225
1221
 
1222
+ def _get_decimal_scale(self, decimal_type: str) -> int:
1223
+ """
1224
+ 从DECIMAL类型定义中提取小数位数
1225
+
1226
+ :param decimal_type: DECIMAL类型字符串,如'DECIMAL(10,4)'
1227
+ :return: 小数位数
1228
+ :raises: 无显式抛出异常,但解析失败时返回默认值2
1229
+ """
1230
+ try:
1231
+ # 匹配DECIMAL类型中的精度和小数位数
1232
+ match = re.match(r'decimal\((\d+),\s*(\d+)\)', decimal_type.lower())
1233
+ if match:
1234
+ return int(match.group(2))
1235
+ except (ValueError, AttributeError, IndexError):
1236
+ pass
1237
+
1238
+ # 默认返回2位小数
1239
+ return 2
1240
+
1226
1241
  def _prepare_insert_sql(
1227
1242
  self,
1228
1243
  db_name: str,
@@ -1345,7 +1360,7 @@ class MySQLUploader:
1345
1360
  '批次': f'{batch_id} {batch_index + 1}/{total_data_length}',
1346
1361
  'error_type': type(e).__name__,
1347
1362
  '批量操作失败': str(e),
1348
- '事务提交模式': transaction_mode,
1363
+ '事务模式': transaction_mode,
1349
1364
  '处理方式': '整个批次回滚'
1350
1365
  })
1351
1366
 
@@ -1382,26 +1397,13 @@ class MySQLUploader:
1382
1397
  '数据类型': set_typ,
1383
1398
  '是否排重': check_duplicate,
1384
1399
  '排重列': duplicate_columns,
1385
- '事务提交模式': transaction_mode,
1400
+ '事务模式': transaction_mode,
1386
1401
  })
1387
1402
 
1388
1403
  # 混合模式最后统一提交
1389
1404
  if transaction_mode == 'hybrid':
1390
1405
  conn.commit()
1391
1406
 
1392
- logger.debug(sys._getframe().f_code.co_name, {
1393
- '库': db_name,
1394
- '表': table_name,
1395
- '批次': batch_id,
1396
- '批次处理完成': batch_index // len(batch) + 1,
1397
- '总批次': (total_data_length + len(batch) - 1) // len(batch),
1398
- '数据量': len(batch),
1399
- '插入': batch_inserted,
1400
- '跳过': batch_skipped,
1401
- '失败': batch_failed,
1402
- '事务提交模式': transaction_mode,
1403
- })
1404
-
1405
1407
  return batch_inserted, batch_skipped, batch_failed
1406
1408
 
1407
1409
  def _process_single_row(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 3.10.4
3
+ Version: 3.10.6
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=L-43kDdR8o3iwkH5IR35xUFgTPugEww0j_gk9jPlkCU,18
2
+ mdbq/__version__.py,sha256=2yGCmv-ga4rvoQTusuYVliB1aOSRt0PA120jDEeMuUg,18
3
3
  mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
4
4
  mdbq/aggregation/optimize.py,sha256=2oalzD9weZhDclUC22OLxYa8Zj7KnmsGUoUau_Jlyc4,19796
5
5
  mdbq/aggregation/query_data.py,sha256=5_OzjGR5Sq00q-EgAYmSE5V9i4Solw9y4hkldl4mvt8,179808
@@ -12,7 +12,7 @@ mdbq/mysql/__init__.py,sha256=A_DPJyAoEvTSFojiI2e94zP0FKtCkkwKP1kYUCSyQzo,11
12
12
  mdbq/mysql/deduplicator.py,sha256=brhX3eyE8-kn3nAYweKfBbAkXiNcyw_pL4CTyPqmPBg,21983
13
13
  mdbq/mysql/mysql.py,sha256=Fzaqbjg5g3HdNl50jInIrdurdzcgR2CCzdKLVImD1-Q,55339
14
14
  mdbq/mysql/s_query.py,sha256=X055aLRAgxVvueXx4NbfNjp6MyBI02_XBb1pTKw09L0,8660
15
- mdbq/mysql/uploader.py,sha256=ElT1-Jq5nR6qg8re0rfs26YGNPHK6zsNGc3ni7TnWFA,61954
15
+ mdbq/mysql/uploader.py,sha256=nqTSa6Pw0SUdioQE-wTHXVPirMsmOJE_Hy4A0N1g3E0,61857
16
16
  mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
17
17
  mdbq/other/download_sku_picture.py,sha256=YU8DxKMXbdeE1OOKEA848WVp62jYHw5O4tXTjUdq9H0,44832
18
18
  mdbq/other/otk.py,sha256=iclBIFbQbhlqzUbcMMoePXBpcP1eZ06ZtjnhcA_EbmE,7241
@@ -25,7 +25,7 @@ mdbq/redis/__init__.py,sha256=YtgBlVSMDphtpwYX248wGge1x-Ex_mMufz4-8W0XRmA,12
25
25
  mdbq/redis/getredis.py,sha256=Uk8-cOWT0JU1qRyIVqdbYokSLvkDIAfcokmYj1ebw8k,24104
26
26
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
27
27
  mdbq/spider/aikucun.py,sha256=YyPWa_nOH1zs8wgTDcgzn5w8szGKWPyWzmWMVIPkFnU,21638
28
- mdbq-3.10.4.dist-info/METADATA,sha256=z-9kwc0z6aVg7ugS9FPf2TZd1vfyNBYz0qpvsfW3b_w,364
29
- mdbq-3.10.4.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
30
- mdbq-3.10.4.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
31
- mdbq-3.10.4.dist-info/RECORD,,
28
+ mdbq-3.10.6.dist-info/METADATA,sha256=_mnvUCQWy7MDVQS-VdYcY0S-n5PqymcyoqCqraB9DMs,364
29
+ mdbq-3.10.6.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
30
+ mdbq-3.10.6.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
31
+ mdbq-3.10.6.dist-info/RECORD,,
File without changes