如何用Python解析XML并存入SQLite数据库

月夜之吻
发布: 2025-12-17 11:56:04
原创
354人浏览过
Python解析XML存入SQLite需三步:先用xml.etree.ElementTree分析结构并提取字段(区分.get()取属性与.text取文本),再转为字典列表;然后用sqlite3建表(注意字段类型匹配);最后executemany()批量插入,兼顾安全与性能。

如何用python解析xml并存入sqlite数据库

用Python解析XML并存入SQLite数据库,核心是三步:读取XML、提取数据、插入SQLite。关键在于结构化处理——XML格式多变,需先理清标签层级和字段映射关系,再用标准库xml.etree.ElementTree)安全解析,避免第三方依赖;SQLite用sqlite3原生支持,无需额外安装。

1. 分析XML结构,明确要存的字段

比如有如下简化XML(books.xml):

<library>
  <book id="1">
    <title>Python编程</title>
    <author>张三</author>
    <price>59.9</price>
  </book>
  <book id="2">
    <title>数据结构</title>
    <author>李四</author>
    <price>45.5</price>
  </book>
</library>
登录后复制

目标字段是:id(属性)、titleauthorprice。注意idbook标签上,其余是子元素内容——解析时需区分.get()(取属性)和.text(取文本)。

2. 用ElementTree解析XML,转为Python字典列表

不建议直接逐节点拼SQL,先统一转成结构化数据更安全、易调试:

立即学习Python免费学习笔记(深入)”;

Python v2.4 中文手册 chm
Python v2.4 中文手册 chm

Python v2.4版chm格式的中文手册,内容丰富全面,不但是一本手册,你完全可以把她作为一本Python的入门教程,教你如何使用Python解释器、流程控制、数据结构、模板、输入和输出、错误和异常、类和标准库详解等方面的知识技巧。同时后附的手册可以方便你的查询。

Python v2.4 中文手册 chm 2
查看详情 Python v2.4 中文手册 chm
  • ET.parse()加载文件,或ET.fromstring()加载字符串
  • .findall("book")定位所有记录节点
  • 对每个book,用.get("id")取属性,.find("title").text等取子元素值
  • try/except防缺失字段(如某本书没<price></price>),设默认值或跳过

示例代码片段:

import xml.etree.ElementTree as ET

tree = ET.parse("books.xml")
root = tree.getroot()

books = []
for book in root.findall("book"):
    books.append({
        "id": book.get("id"),
        "title": book.find("title").text if book.find("title") is not None else None,
        "author": book.find("author").text if book.find("author") is not None else None,
        "price": float(book.find("price").text) if book.find("price") is not None else None,
    })
登录后复制

3. 创建SQLite表并批量插入

表结构要匹配字段类型:id可设TEXT或INTEGER(若XML中全是数字),price用REAL,title/author用TEXT:

  • sqlite3.connect()连数据库(文件不存在会自动创建)
  • cursor.execute()建表,注意加IF NOT EXISTS避免重复报错
  • executemany()批量插入,比循环execute()快得多,且自动处理SQL注入(参数化)
  • 别忘了conn.commit()conn.close()

接上例:

import sqlite3

conn = sqlite3.connect("library.db")
cursor = conn.cursor()

cursor.execute("""
    CREATE TABLE IF NOT EXISTS books (
        id TEXT PRIMARY KEY,
        title TEXT,
        author TEXT,
        price REAL
    )
""")

cursor.executemany(
    "INSERT OR REPLACE INTO books (id, title, author, price) VALUES (?, ?, ?, ?)",
    [(b["id"], b["title"], b["author"], b["price"]) for b in books]
)

conn.commit()
conn.close()
登录后复制

4. 小心常见坑

编码问题:XML文件含中文时,确保用ET.parse("books.xml", parser=ET.XMLParser(encoding="utf-8"))显式指定编码。
空值与类型:XML中<price></price>或空白标签会导致.textNone,转换float(None)会报错,务必提前判断。
特殊字符:ElementTree能自动处理&等实体,不用手动解码。<br><strong><a style="color:#f60; text-decoration:underline;" title="大数据" href="https://www.php.cn/zt/16141.html" target="_blank">大数据</a>量</strong>:若XML超大(百MB以上),改用<code>iterparse()边读边处理,避免内存爆满。

以上就是如何用Python解析XML并存入SQLite数据库的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号