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.
Files changed (33) hide show
  1. {mdbq-4.0.58 → mdbq-4.0.59}/PKG-INFO +1 -1
  2. mdbq-4.0.59/mdbq/__version__.py +1 -0
  3. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/mysql/uploader.py +80 -7
  4. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq.egg-info/PKG-INFO +1 -1
  5. mdbq-4.0.58/mdbq/__version__.py +0 -1
  6. {mdbq-4.0.58 → mdbq-4.0.59}/README.txt +0 -0
  7. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/__init__.py +0 -0
  8. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/log/__init__.py +0 -0
  9. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/log/mylogger.py +0 -0
  10. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/myconf/__init__.py +0 -0
  11. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/myconf/myconf.py +0 -0
  12. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/mysql/__init__.py +0 -0
  13. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/mysql/deduplicator.py +0 -0
  14. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/mysql/mysql.py +0 -0
  15. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/mysql/s_query.py +0 -0
  16. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/mysql/unique_.py +0 -0
  17. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/other/__init__.py +0 -0
  18. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/other/download_sku_picture.py +0 -0
  19. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/other/error_handler.py +0 -0
  20. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/other/otk.py +0 -0
  21. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/other/pov_city.py +0 -0
  22. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/other/ua_sj.py +0 -0
  23. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/pbix/__init__.py +0 -0
  24. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/pbix/pbix_refresh.py +0 -0
  25. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/pbix/refresh_all.py +0 -0
  26. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/redis/__init__.py +0 -0
  27. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/redis/getredis.py +0 -0
  28. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq/spider/__init__.py +0 -0
  29. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq.egg-info/SOURCES.txt +0 -0
  30. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq.egg-info/dependency_links.txt +0 -0
  31. {mdbq-4.0.58 → mdbq-4.0.59}/mdbq.egg-info/top_level.txt +0 -0
  32. {mdbq-4.0.58 → mdbq-4.0.59}/setup.cfg +0 -0
  33. {mdbq-4.0.58 → mdbq-4.0.59}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 4.0.58
3
+ Version: 4.0.59
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.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
- safe_primary_keys = [_index_col_sql(pk) for pk in primary_keys]
457
- primary_key_sql = f"PRIMARY KEY ({','.join(safe_primary_keys)})"
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
- if idx_col in set_typ:
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_{self._normalize_col(idx_col)}` ({safe_idx_col})")
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
- safe_unique_cols = [_index_col_sql(col) for col in unique_cols]
491
- unique_name = f"uniq_{'_'.join([self._normalize_col(c) for c in unique_cols])}"
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)}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mdbq
3
- Version: 4.0.58
3
+ Version: 4.0.59
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.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