#!/usr/bin/env python3 """导入产品对应关系数据,合并到产品基础表""" import csv import pymysql import importlib.util spec = importlib.util.spec_from_file_location("config", "config.py") config_mod = importlib.util.module_from_spec(spec) spec.loader.exec_module(config_mod) conn = pymysql.connect(**config_mod.DB_CONFIG, cursorclass=pymysql.cursors.DictCursor) def safe_int(val): if not val or val.strip() in ('', '#N/A', 'NA', 'N/A'): return 0 try: return int(float(val.strip())) except: return 0 with open('tmp_csv/cpdygx.csv', 'r', encoding='utf-8') as f: rows = list(csv.DictReader(f)) print(f'读取到 {len(rows)} 条产品对应关系') matched = 0 new_rows = 0 with conn.cursor() as cur: for row in rows: product_code = row.get('货品编码', '').strip() if not product_code: continue # 检查是否已存在 cur.execute("SELECT id FROM products WHERE product_code=%s", (product_code,)) existing = cur.fetchone() # 公共字段提取 type_val = (row.get('产品类型') or '').strip() spec_val = (row.get('规格') or '').strip() lt = safe_int(row.get('货期', '0')) logt = safe_int(row.get('物流时间', '0')) sup_code = (row.get('供应商编码') or '').strip() sup_name = (row.get('供应商模糊匹配') or '').strip() follower = (row.get('采购跟单') or '').strip() planner = (row.get('采购计划') or '').strip() plat = (row.get('平台') or '').strip() op = (row.get('运营') or '').strip() name = (row.get('名称') or '').strip() brand = (row.get('品牌') or '').strip() if existing: # 更新已有产品 updates = [] uparams = [] for col, val in [ ('product_type', type_val), ('specification', spec_val), ('lead_time', lt), ('logistics_time', logt), ('supplier_code', sup_code), ('supplier_name_match', sup_name), ('procurement_follower', follower), ('procurement_planner', planner), ('platform', plat), ('operator', op), ]: if val: updates.append(f"{col}=%s") uparams.append(val) if updates: uparams.append(product_code) sql = f"UPDATE products SET {', '.join(updates)} WHERE product_code=%s" cur.execute(sql, uparams) matched += 1 else: # 新增产品 try: cur.execute(""" INSERT INTO products (product_code, product_name, brand, product_type, specification, lead_time, logistics_time, supplier_code, supplier_name_match, procurement_follower, procurement_planner, platform, operator, import_date) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, CURDATE()) """, ( product_code, name, brand, type_val, spec_val, lt, logt, sup_code, sup_name, follower, planner, plat, op )) new_rows += 1 except Exception as e: print(f" 新增失败 [{product_code}]: {e}") conn.commit() conn.close() print(f'匹配更新: {matched} 条') print(f'新增产品: {new_rows} 条') print(f'完成 ✅')