You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sqlizer模块批量转XML到SQL Server的Python代码为何报错?

问题修复方案

错误原因

  • converter.convert() 调用位置处于读取XML文件的with代码块外部,with语法会在代码块执行结束后自动关闭文件句柄,sqlizer上传文件时尝试读取已关闭的文件,触发I/O错误
  • sqlizer.File() 构造参数传递错误:第四个参数应为文件名字符串,原代码重复传入了文件对象
  • 代码逻辑错误:遍历文件列表的循环内未执行转换操作,仅对最后一次循环生成的converter做了调用,前面的XML文件均未处理,且没有保存转换后的SQL结果
  • 原代码混入了运行时的打印输出内容,属于语法错误

修正后代码

import os
import sqlizer
# 替换为你自己的API_KEY
sqlizer.config.API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

work_dir = 'C:/metadati/asim/asim_metadati/'
os.chdir(work_dir)
print("Current working directory: {0}".format(os.getcwd()))

with open(os.path.join(work_dir, 'filelist.txt'), 'r') as fn:
    for line in fn:
        xml_filename = line.rstrip()
        # 跳过空行
        if not xml_filename:
            continue
        # 读取XML文件
        with open(xml_filename, mode='r', encoding='utf-8') as file_content:
            # 修正参数:第四个参数为文件名,第五个为目标表名
            converter = sqlizer.File(
                file_handle=file_content,
                database_type=sqlizer.DatabaseType.SQLServer,
                file_type=sqlizer.FileType.XML,
                file_name=xml_filename,
                table_name='my_table'
            )          
            # 在文件句柄关闭前执行转换
            converter.convert(wait=True)
            # 下载转换结果并保存为同名.sql文件
            sql_content = converter.download_result_file().text
            sql_filename = os.path.splitext(xml_filename)[0] + '.sql'
            with open(sql_filename, 'w', encoding='utf-8') as sql_f:
                sql_f.write(sql_content)
            print(f"{xml_filename} 转换完成,结果已保存至 {sql_filename}")

修改说明

  • 移除了代码中混入的打印输出冗余内容,修复语法错误
  • 将转换、下载结果的逻辑移入XML文件读取的with代码块内,确保文件句柄在上传时处于打开状态
  • 修正了sqlizer.File的参数传递,将第四个参数替换为正确的文件名字符串
  • 增加了转换结果的本地保存逻辑,每个XML文件转换后会生成对应的.sql文件存放在同级目录
  • 增加空行跳过逻辑,避免filelist.txt存在空行时触发异常

内容的提问来源于stack exchange,提问作者Enzog2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:12:03