|
@@ -22,10 +22,11 @@ def parse_region_table_excel(file_path):
|
|
|
print(f"文件读取失败:{file_path}\n错误:{str(e)}")
|
|
|
return 0
|
|
|
|
|
|
- params = []
|
|
|
+ params_old = [] # 老逻辑的数据(非地级市)
|
|
|
+ params_new = [] # 新逻辑的地级市数据
|
|
|
|
|
|
# SQL模板使用命名占位符
|
|
|
- sql_template = """
|
|
|
+ sql_template_old = """
|
|
|
INSERT INTO `t_yujin_crossborder_region_trade`
|
|
|
(`year_month`, `region_code`, `region_name`, `region_type`,
|
|
|
`monthly_total`, `monthly_export`, `monthly_import`,
|
|
@@ -46,6 +47,22 @@ def parse_region_table_excel(file_path):
|
|
|
,create_time = NOW()
|
|
|
"""
|
|
|
|
|
|
+ # SQL模板2:新表 - t_yujin_crossborder_prov_region_trade
|
|
|
+ sql_template_new = """
|
|
|
+ INSERT INTO `t_yujin_crossborder_prov_region_trade`
|
|
|
+ (`crossborder_year`, `crossborder_year_month`, `prov_code`, `prov_name`,
|
|
|
+ `city_code`, `city_name`, `monthly_total`, `monthly_import`, `monthly_export`)
|
|
|
+ VALUES
|
|
|
+ (:crossborder_year, :crossborder_year_month, :prov_code, :prov_name,
|
|
|
+ :city_code, :city_name, :monthly_total, :monthly_import, :monthly_export)
|
|
|
+ ON DUPLICATE KEY UPDATE
|
|
|
+ monthly_total = VALUES(monthly_total),
|
|
|
+ monthly_import = VALUES(monthly_import),
|
|
|
+ monthly_export = VALUES(monthly_export),
|
|
|
+ create_time = NOW()
|
|
|
+ """
|
|
|
+
|
|
|
+
|
|
|
# 从第7行开始读取(索引6)
|
|
|
for row_idx in range(6, sheet.nrows):
|
|
|
try:
|
|
@@ -68,20 +85,39 @@ def parse_region_table_excel(file_path):
|
|
|
print(f"⚠️ 地区匹配失败:{region_name}")
|
|
|
continue
|
|
|
|
|
|
- # 构建参数字典
|
|
|
- param_dict = {
|
|
|
- "year_month": year_month,
|
|
|
- "region_code": region_info['code'], # region_code
|
|
|
- "region_name": region_name,
|
|
|
- "region_type": region_info['type'],
|
|
|
- "monthly_total": parse_value(row[2]), # monthly_total
|
|
|
- "monthly_import": parse_value(row[4]), # monthly_import
|
|
|
- "monthly_export": parse_value(row[6]), # monthly_export
|
|
|
- "ytd_total": parse_value(row[8]), # ytd_total
|
|
|
- "ytd_import": parse_value(row[9]), # ytd_import
|
|
|
- "ytd_export": parse_value(row[10]) # ytd_export
|
|
|
- }
|
|
|
- params.append(param_dict)
|
|
|
+ is_municipality = region_name in ["北京市","天津市","上海市","重庆市"]
|
|
|
+ is_city = region_name.endswith("市") and not is_municipality
|
|
|
+
|
|
|
+
|
|
|
+ if is_city:
|
|
|
+ # ✅ 地级市(非直辖市),写入新表
|
|
|
+ param_dict_new = {
|
|
|
+ "crossborder_year": year,
|
|
|
+ "crossborder_year_month": year_month,
|
|
|
+ "prov_code": region_info['province_code'],
|
|
|
+ "prov_name": region_info['province_name'],
|
|
|
+ "city_code": region_info['code'],
|
|
|
+ "city_name": region_name,
|
|
|
+ "monthly_total": parse_value(row[2]),
|
|
|
+ "monthly_import": parse_value(row[6]),
|
|
|
+ "monthly_export": parse_value(row[4]),
|
|
|
+ }
|
|
|
+ params_new.append(param_dict_new)
|
|
|
+ else:
|
|
|
+ # ❌ 非地级市(含省、自治区、直辖市等),写入老表
|
|
|
+ param_dict_old = {
|
|
|
+ "year_month": year_month,
|
|
|
+ "region_code": region_info['code'],
|
|
|
+ "region_name": region_name,
|
|
|
+ "region_type": region_info['type'],
|
|
|
+ "monthly_total": parse_value(row[2]),
|
|
|
+ "monthly_import": parse_value(row[6]),
|
|
|
+ "monthly_export": parse_value(row[4]),
|
|
|
+ "ytd_total": parse_value(row[8]),
|
|
|
+ "ytd_import": parse_value(row[10]),
|
|
|
+ "ytd_export": parse_value(row[9]),
|
|
|
+ }
|
|
|
+ params_old.append(param_dict_old)
|
|
|
|
|
|
except Exception as e:
|
|
|
print(f"行{row_idx}处理失败:{str(e)}")
|
|
@@ -89,15 +125,21 @@ def parse_region_table_excel(file_path):
|
|
|
|
|
|
# 使用DBHelper执行批量SQL
|
|
|
try:
|
|
|
- if params:
|
|
|
- row_count = db.execute_sql_with_params(sql_template, params)
|
|
|
- print(f"✅ 成功处理 {len(params)} 条记录,插入/更新 {row_count} 行")
|
|
|
- return row_count
|
|
|
- print(f"⚠️ 未找到有效数据:{file_path}")
|
|
|
- return 0
|
|
|
+ if params_old:
|
|
|
+ row_count = db.execute_sql_with_params(sql_template_old, params_old)
|
|
|
+ print(f"✅ 成功处理 {len(params_old)} 条记录(老表),插入/更新 {row_count} 行")
|
|
|
except Exception as e:
|
|
|
- print(f"数据库操作失败:{str(e)}")
|
|
|
- return 0
|
|
|
+ print(f"数据库操作失败(老表):{str(e)}")
|
|
|
+
|
|
|
+ # 执行新表插入
|
|
|
+ try:
|
|
|
+ if params_new:
|
|
|
+ row_count = db.execute_sql_with_params(sql_template_new, params_new)
|
|
|
+ print(f"✅ 成功处理 {len(params_new)} 条记录(新表),插入/更新 {row_count} 行")
|
|
|
+ except Exception as e:
|
|
|
+ print(f"数据库操作失败(新表):{str(e)}")
|
|
|
+
|
|
|
+ return len(params_old) + len(params_new)
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|