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
相关产品推荐
相关产品推荐

