Files
pj_service_cloud/extract_product_codes.py
2025-09-15 15:11:39 +08:00

127 lines
3.4 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Excel货号提取工具
从Excel文件中提取货号并生成删除SQL
"""
import pandas as pd
import sys
from pathlib import Path
def extract_product_codes_and_generate_sql(excel_file_path):
"""
从Excel文件提取货号并生成删除SQL
"""
try:
# 读取Excel文件
print(f"正在读取Excel文件: {excel_file_path}")
# 尝试读取第一个工作表
df = pd.read_excel(excel_file_path, sheet_name=0)
print(f"Excel文件包含 {len(df)} 行数据")
print("列名:", list(df.columns))
# 寻找货号列
product_code_column = None
possible_columns = ['货号', 'productCode', 'product_code', '商品编码', '编码']
for col in df.columns:
if any(keyword in str(col) for keyword in possible_columns):
product_code_column = col
break
if product_code_column is None:
print("未找到货号列,请检查Excel文件格式")
print("可用的列:", list(df.columns))
return
print(f"找到货号列: {product_code_column}")
# 提取货号
product_codes = df[product_code_column].dropna().astype(str).tolist()
product_codes = [code.strip() for code in product_codes if code.strip()]
print(f"共提取到 {len(product_codes)} 个货号")
if not product_codes:
print("没有找到有效的货号数据")
return
# 生成SQL语句
generate_delete_sql(product_codes)
except Exception as e:
print(f"处理Excel文件时出错: {str(e)}")
def generate_delete_sql(product_codes):
"""
生成删除SQL语句
"""
# 格式化货号列表
formatted_codes = [f"'{code}'" for code in product_codes]
codes_str = ',\n '.join(formatted_codes)
sql_template = f"""
-- 根据货号删除商品及相关数据的SQL语句
-- 总共 {len(product_codes)} 个货号
-- 1. 首先查询要删除的商品ID (用于确认)
SELECT id, product_code, product_name
FROM sm_erp_spu
WHERE product_code IN (
{codes_str}
);
-- 2. 删除相关的辅助条码数据
DELETE FROM sm_erp_auxiliary_code
WHERE spu_id IN (
SELECT id FROM sm_erp_spu WHERE product_code IN (
{codes_str}
)
);
-- 3. 删除相关的单位数据
DELETE FROM sm_erp_unit
WHERE spu_id IN (
SELECT id FROM sm_erp_spu WHERE product_code IN (
{codes_str}
)
);
-- 4. 删除相关的库存数据
DELETE FROM sm_erp_stock
WHERE erp_spu_id IN (
SELECT id FROM sm_erp_spu WHERE product_code IN (
{codes_str}
)
);
-- 5. 最后删除商品主表数据
DELETE FROM sm_erp_spu
WHERE product_code IN (
{codes_str}
);
-- 货号列表:
{chr(10).join([f"-- {i+1}. {code}" for i, code in enumerate(product_codes)])}
"""
# 保存到文件
with open('delete_products.sql', 'w', encoding='utf-8') as f:
f.write(sql_template)
print("SQL语句已生成并保存到 delete_products.sql 文件")
print("\n" + "="*50)
print(sql_template)
if __name__ == "__main__":
# Excel文件路径
excel_file = "pjcloud-supermarket/pjcloud-supermarket-biz/青少年宫.111xls.xls"
if not Path(excel_file).exists():
print(f"Excel文件不存在: {excel_file}")
sys.exit(1)
extract_product_codes_and_generate_sql(excel_file)