127 lines
3.4 KiB
Python
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) |