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

Python解析XML得到不同长度列表如何存入MySQL数据库

解决方案

步骤1:修正解析逻辑完成元素&占比配对

你解析得到的列表为元素名、占比值交替排列的结构,直接按步长为2两两分组即可适配任意长度的解析结果,同时注意不要用list作为变量名,会覆盖Python内置关键字:

import mysql.connector
import xml.etree.ElementTree as ET

# 替换为你自己的数据库配置初始化连接
db_conn = mysql.connector.connect(
    host="数据库地址",
    user="用户名",
    password="密码",
    database="库名"
)
cursor = db_conn.cursor()

tree = ET.parse('gg3.vmat')
root = tree.getroot()

for material in root.findall('Material'):
    density = material.find('strings').text
    material_name = material.get('name')
    
    parse_list = density.split('\n')
    removing_blank = [x.strip(' ') for x in parse_list]
    removing_space = [x for x in removing_blank if x.strip()]
    
    # 提取材料编号
    material_number = removing_space[0].split('=')[1].strip('" ')
    # 提取元素和占比列表
    element_items = [c.split('=')[1].strip('" ') for c in removing_space[1:]]
    
    # 两两分组得到(元素名,占比值)对,适配任意长度的解析结果
    for element_name, ratio in zip(element_items[::2], element_items[1::2]):
        # 此处SQL请根据你实际的表名、字段名调整
        insert_sql = """
        INSERT INTO 你的表名 (material_number, material_name, element_name, density_ratio)
        VALUES (%s, %s, %s, %s)
        """
        cursor.execute(insert_sql, (material_number, material_name, element_name, float(ratio)))

# 提交所有写入操作
db_conn.commit()
# 释放连接
cursor.close()
db_conn.close()

步骤2:适配库表结构说明

如果你的表为宽表结构(一行存储单个材料的所有元素占比),可以先把所有元素拼接为对应字段的键值对再动态生成插入语句,更推荐使用上述行式存储方案(单个元素占一行),天然适配可变长度的元素列表,扩展性更好。

原f-string方案问题说明

不要直接用f-string拼接SQL语句,一方面存在SQL注入风险,另一方面数值、字符串的引号格式处理很容易出错,用mysql.connector自带的参数化查询(%s占位符)会自动处理所有格式问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:36:05