mdbq 3.10.0__tar.gz → 3.10.1__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.
- {mdbq-3.10.0 → mdbq-3.10.1}/PKG-INFO +1 -1
- mdbq-3.10.1/mdbq/__version__.py +1 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/mysql/uploader.py +86 -34
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq.egg-info/PKG-INFO +1 -1
- mdbq-3.10.0/mdbq/__version__.py +0 -1
- {mdbq-3.10.0 → mdbq-3.10.1}/README.txt +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/__init__.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/aggregation/__init__.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/aggregation/optimize.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/aggregation/query_data.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/config/__init__.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/config/config.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/log/__init__.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/log/mylogger.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/log/spider_logging.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/mysql/__init__.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/mysql/deduplicator.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/mysql/mysql.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/mysql/s_query.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/other/__init__.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/other/download_sku_picture.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/other/otk.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/other/pov_city.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/other/ua_sj.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/pbix/__init__.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/pbix/pbix_refresh.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/pbix/refresh_all.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/redis/__init__.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/redis/getredis.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/spider/__init__.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq/spider/aikucun.py +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq.egg-info/SOURCES.txt +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq.egg-info/dependency_links.txt +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/mdbq.egg-info/top_level.txt +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/setup.cfg +0 -0
- {mdbq-3.10.0 → mdbq-3.10.1}/setup.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
VERSION = '3.10.1'
|
@@ -1125,7 +1125,6 @@ class MySQLUploader:
|
|
1125
1125
|
'自动使用默认模式': 'batch'
|
1126
1126
|
})
|
1127
1127
|
transaction_mode = 'batch'
|
1128
|
-
# return
|
1129
1128
|
|
1130
1129
|
# 获取所有列名(排除id列)
|
1131
1130
|
all_columns = [col for col in set_typ.keys() if col.lower() != 'id']
|
@@ -1191,50 +1190,103 @@ class MySQLUploader:
|
|
1191
1190
|
batch_skipped = 0
|
1192
1191
|
batch_failed = 0
|
1193
1192
|
|
1194
|
-
|
1193
|
+
if transaction_mode == 'batch':
|
1194
|
+
# 批量模式特殊处理 - 尝试逐行插入但保持事务
|
1195
1195
|
try:
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1199
|
-
|
1200
|
-
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1216
|
-
|
1196
|
+
for row_idx, row in enumerate(batch, 1):
|
1197
|
+
try:
|
1198
|
+
# 准备参数
|
1199
|
+
row_values = [row.get(col) for col in all_columns]
|
1200
|
+
if check_duplicate and not update_on_duplicate:
|
1201
|
+
row_values += [row.get(col) for col in duplicate_columns]
|
1202
|
+
|
1203
|
+
cursor.execute(sql, row_values)
|
1204
|
+
|
1205
|
+
if check_duplicate:
|
1206
|
+
# 检查是否实际插入了行
|
1207
|
+
if cursor.rowcount > 0:
|
1208
|
+
batch_inserted += 1
|
1209
|
+
else:
|
1210
|
+
batch_skipped += 1
|
1211
|
+
else:
|
1212
|
+
batch_inserted += 1
|
1213
|
+
|
1214
|
+
except Exception as e:
|
1215
|
+
batch_failed += 1
|
1216
|
+
logger.error(sys._getframe().f_code.co_name, {
|
1217
|
+
'库': db_name,
|
1218
|
+
'表': table_name,
|
1219
|
+
'批次/当前行': f'{batch_id} {row_idx}/{len(batch)}',
|
1220
|
+
'error_type': type(e).__name__,
|
1221
|
+
'单行插入失败': str(e),
|
1222
|
+
'数据类型': set_typ,
|
1223
|
+
'是否排重': check_duplicate,
|
1224
|
+
'排重列': duplicate_columns,
|
1225
|
+
'事务提交模式': transaction_mode,
|
1226
|
+
'处理方式': '继续处理剩余行'
|
1227
|
+
})
|
1228
|
+
continue # 继续处理下一行
|
1229
|
+
|
1230
|
+
# 批量模式最后统一提交
|
1231
|
+
conn.commit()
|
1217
1232
|
|
1218
1233
|
except Exception as e:
|
1219
|
-
#
|
1220
|
-
# conn.rollback()
|
1234
|
+
# 如果整个批量操作失败,回滚
|
1221
1235
|
conn.rollback()
|
1222
|
-
batch_failed
|
1236
|
+
batch_failed = len(batch) # 标记整个批次失败
|
1223
1237
|
logger.error(sys._getframe().f_code.co_name, {
|
1224
1238
|
'库': db_name,
|
1225
1239
|
'表': table_name,
|
1226
|
-
'批次': batch_id,
|
1240
|
+
'批次': f'{batch_id} {i+1}/{len(data)}',
|
1227
1241
|
'error_type': type(e).__name__,
|
1228
|
-
'
|
1229
|
-
'数据类型': set_typ,
|
1230
|
-
'是否排重': check_duplicate,
|
1231
|
-
'排重列': duplicate_columns,
|
1242
|
+
'批量操作失败': str(e),
|
1232
1243
|
'事务提交模式': transaction_mode,
|
1244
|
+
'处理方式': '整个批次回滚'
|
1233
1245
|
})
|
1234
1246
|
|
1235
|
-
#
|
1236
|
-
|
1237
|
-
|
1247
|
+
else: # row 或 hybrid 模式
|
1248
|
+
for row_idx, row in enumerate(batch, 1):
|
1249
|
+
try:
|
1250
|
+
# 准备参数
|
1251
|
+
row_values = [row.get(col) for col in all_columns]
|
1252
|
+
if check_duplicate and not update_on_duplicate:
|
1253
|
+
row_values += [row.get(col) for col in duplicate_columns]
|
1254
|
+
|
1255
|
+
cursor.execute(sql, row_values)
|
1256
|
+
|
1257
|
+
if check_duplicate:
|
1258
|
+
# 检查是否实际插入了行
|
1259
|
+
if cursor.rowcount > 0:
|
1260
|
+
batch_inserted += 1
|
1261
|
+
else:
|
1262
|
+
batch_skipped += 1
|
1263
|
+
else:
|
1264
|
+
batch_inserted += 1
|
1265
|
+
|
1266
|
+
# 根据模式决定提交时机
|
1267
|
+
if transaction_mode == 'row':
|
1268
|
+
conn.commit() # 逐行提交
|
1269
|
+
elif transaction_mode == 'hybrid' and row_idx % 100 == 0:
|
1270
|
+
conn.commit() # 每100行提交一次
|
1271
|
+
|
1272
|
+
except Exception as e:
|
1273
|
+
conn.rollback()
|
1274
|
+
batch_failed += 1
|
1275
|
+
logger.error(sys._getframe().f_code.co_name, {
|
1276
|
+
'库': db_name,
|
1277
|
+
'表': table_name,
|
1278
|
+
'批次/当前行': f'{batch_id} {row_idx}/{len(batch)}',
|
1279
|
+
'error_type': type(e).__name__,
|
1280
|
+
'单行插入失败': str(e),
|
1281
|
+
'数据类型': set_typ,
|
1282
|
+
'是否排重': check_duplicate,
|
1283
|
+
'排重列': duplicate_columns,
|
1284
|
+
'事务提交模式': transaction_mode,
|
1285
|
+
})
|
1286
|
+
|
1287
|
+
# 混合模式最后统一提交
|
1288
|
+
if transaction_mode == 'hybrid':
|
1289
|
+
conn.commit()
|
1238
1290
|
|
1239
1291
|
# 更新总统计
|
1240
1292
|
total_inserted += batch_inserted
|
mdbq-3.10.0/mdbq/__version__.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
VERSION = '3.10.0'
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|