mdbq 4.0.58__tar.gz → 4.0.59__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-4.0.58 → mdbq-4.0.59}/PKG-INFO +1 -1
- mdbq-4.0.59/mdbq/__version__.py +1 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/mysql/uploader.py +80 -7
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq.egg-info/PKG-INFO +1 -1
- mdbq-4.0.58/mdbq/__version__.py +0 -1
- {mdbq-4.0.58 → mdbq-4.0.59}/README.txt +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/__init__.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/log/__init__.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/log/mylogger.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/myconf/__init__.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/myconf/myconf.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/mysql/__init__.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/mysql/deduplicator.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/mysql/mysql.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/mysql/s_query.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/mysql/unique_.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/other/__init__.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/other/download_sku_picture.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/other/error_handler.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/other/otk.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/other/pov_city.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/other/ua_sj.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/pbix/__init__.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/pbix/pbix_refresh.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/pbix/refresh_all.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/redis/__init__.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/redis/getredis.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/spider/__init__.py +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq.egg-info/SOURCES.txt +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq.egg-info/dependency_links.txt +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/mdbq.egg-info/top_level.txt +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/setup.cfg +0 -0
- {mdbq-4.0.58 → mdbq-4.0.59}/setup.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
VERSION = '4.0.59'
|
@@ -348,6 +348,10 @@ class MySQLUploader:
|
|
348
348
|
import hashlib
|
349
349
|
hash_suffix = hashlib.md5(identifier.encode('utf-8')).hexdigest()[:8]
|
350
350
|
cleaned = f'unknown_col_{hash_suffix}'
|
351
|
+
|
352
|
+
# 确保标识符不以数字开头(MySQL要求)
|
353
|
+
if cleaned and cleaned[0].isdigit():
|
354
|
+
cleaned = f'col_{cleaned}'
|
351
355
|
mysql_keywords = {
|
352
356
|
'select', 'insert', 'update', 'delete', 'from', 'where', 'and', 'or',
|
353
357
|
'not', 'like', 'in', 'is', 'null', 'true', 'false', 'between'
|
@@ -452,9 +456,33 @@ class MySQLUploader:
|
|
452
456
|
|
453
457
|
# 处理主键
|
454
458
|
if primary_keys and len(primary_keys) > 0:
|
455
|
-
#
|
456
|
-
|
457
|
-
|
459
|
+
# 验证主键列是否存在于set_typ中
|
460
|
+
valid_primary_keys = []
|
461
|
+
for pk in primary_keys:
|
462
|
+
normalized_pk = self._normalize_col(pk)
|
463
|
+
if normalized_pk in set_typ:
|
464
|
+
valid_primary_keys.append(pk)
|
465
|
+
else:
|
466
|
+
logger.warning('主键列不存在于表结构中,跳过', {
|
467
|
+
'库': db_name,
|
468
|
+
'表': table_name,
|
469
|
+
'列': pk,
|
470
|
+
'规范化后': normalized_pk,
|
471
|
+
'可用列': list(set_typ.keys())
|
472
|
+
})
|
473
|
+
|
474
|
+
if valid_primary_keys:
|
475
|
+
# 如果指定了主键,直接使用指定的主键
|
476
|
+
safe_primary_keys = [_index_col_sql(pk) for pk in valid_primary_keys]
|
477
|
+
primary_key_sql = f"PRIMARY KEY ({','.join(safe_primary_keys)})"
|
478
|
+
else:
|
479
|
+
# 如果没有有效的主键,使用id作为主键
|
480
|
+
logger.warning('所有主键列都不存在于表结构中,使用默认id主键', {
|
481
|
+
'库': db_name,
|
482
|
+
'表': table_name,
|
483
|
+
'原始主键': primary_keys
|
484
|
+
})
|
485
|
+
primary_key_sql = f"PRIMARY KEY (`id`)"
|
458
486
|
else:
|
459
487
|
# 如果没有指定主键,使用id作为主键
|
460
488
|
primary_key_sql = f"PRIMARY KEY (`id`)"
|
@@ -466,9 +494,18 @@ class MySQLUploader:
|
|
466
494
|
index_defs.append(f"INDEX `idx_{self._normalize_col(date_column)}` ({safe_date_col})")
|
467
495
|
if indexes:
|
468
496
|
for idx_col in indexes:
|
469
|
-
|
497
|
+
normalized_idx_col = self._normalize_col(idx_col)
|
498
|
+
if normalized_idx_col in set_typ:
|
470
499
|
safe_idx_col = _index_col_sql(idx_col)
|
471
|
-
index_defs.append(f"INDEX `idx_{
|
500
|
+
index_defs.append(f"INDEX `idx_{normalized_idx_col}` ({safe_idx_col})")
|
501
|
+
else:
|
502
|
+
logger.warning('索引列不存在于表结构中,跳过', {
|
503
|
+
'库': db_name,
|
504
|
+
'表': table_name,
|
505
|
+
'列': idx_col,
|
506
|
+
'规范化后': normalized_idx_col,
|
507
|
+
'可用列': list(set_typ.keys())
|
508
|
+
})
|
472
509
|
|
473
510
|
# UNIQUE KEY定义
|
474
511
|
unique_defs = []
|
@@ -487,12 +524,48 @@ class MySQLUploader:
|
|
487
524
|
'主键': primary_keys
|
488
525
|
})
|
489
526
|
continue
|
490
|
-
|
491
|
-
|
527
|
+
|
528
|
+
# 验证唯一约束的列是否存在于set_typ中
|
529
|
+
valid_unique_cols = []
|
530
|
+
for col in unique_cols:
|
531
|
+
normalized_col = self._normalize_col(col)
|
532
|
+
if normalized_col in set_typ:
|
533
|
+
valid_unique_cols.append(col)
|
534
|
+
else:
|
535
|
+
logger.warning('唯一约束列不存在于表结构中,跳过', {
|
536
|
+
'库': db_name,
|
537
|
+
'表': table_name,
|
538
|
+
'列': col,
|
539
|
+
'规范化后': normalized_col,
|
540
|
+
'可用列': list(set_typ.keys())
|
541
|
+
})
|
542
|
+
|
543
|
+
if not valid_unique_cols:
|
544
|
+
logger.warning('唯一约束的所有列都不存在于表结构中,跳过整个约束', {
|
545
|
+
'库': db_name,
|
546
|
+
'表': table_name,
|
547
|
+
'原始约束': unique_cols
|
548
|
+
})
|
549
|
+
continue
|
550
|
+
|
551
|
+
safe_unique_cols = [_index_col_sql(col) for col in valid_unique_cols]
|
552
|
+
unique_name = f"uniq_{'_'.join([self._normalize_col(c) for c in valid_unique_cols])}"
|
492
553
|
unique_defs.append(f"UNIQUE KEY `{unique_name}` ({','.join(safe_unique_cols)})")
|
493
554
|
|
494
555
|
index_defs = list(set(index_defs))
|
495
556
|
all_defs = column_defs + [primary_key_sql] + index_defs + unique_defs
|
557
|
+
|
558
|
+
# 添加调试日志
|
559
|
+
logger.debug('建表SQL生成', {
|
560
|
+
'库': db_name,
|
561
|
+
'表': table_name,
|
562
|
+
'列定义': column_defs,
|
563
|
+
'主键': primary_key_sql,
|
564
|
+
'索引': index_defs,
|
565
|
+
'唯一约束': unique_defs,
|
566
|
+
'set_typ键': list(set_typ.keys())
|
567
|
+
})
|
568
|
+
|
496
569
|
sql = f"""
|
497
570
|
CREATE TABLE IF NOT EXISTS `{db_name}`.`{table_name}` (
|
498
571
|
{','.join(all_defs)}
|
mdbq-4.0.58/mdbq/__version__.py
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
VERSION = '4.0.58'
|
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
|