使用python将数据从xml文件填充到sqlite数据库
我有一个关于解决问题的指导的问题。我有一个xml文件,我必须使用脚本语言Python将它填充到数据库系统中(不管怎样,它可能是sqlite、mysql) 有人知道如何进行吗使用python将数据从xml文件填充到sqlite数据库,python,xml,database,sqlite,parsing,Python,Xml,Database,Sqlite,Parsing,我有一个关于解决问题的指导的问题。我有一个xml文件,我必须使用脚本语言Python将它填充到数据库系统中(不管怎样,它可能是sqlite、mysql) 有人知道如何进行吗 我需要进一步阅读哪些技术 我必须安装哪些环境 有关于同一主题的教程吗 我已经尝试在其他语言中使用基于树的方法和sax方法解析xml,但从Python开始,我不知道从哪里开始。我已经知道如何设计我需要的数据库 另一个问题是,仅Python可以执行数据库ddl查询吗?如果您习惯于从其他语言对xml进行DOM(树)访问,您可能
- 我需要进一步阅读哪些技术
- 我必须安装哪些环境
- 有关于同一主题的教程吗
另一个问题是,仅Python可以执行数据库ddl查询吗?如果您习惯于从其他语言对xml进行DOM(树)访问,您可能会发现这些标准库模块(及其各自的文档)很有用:
- xml.dom
- xml.dom.minidom
是的,您完全可以从
sqlite3
(以及任何其他符合DB-API的Python模块,如果您选择使用其他关系数据库;-)创建表和其他DDL查询。您可以使用sqlite3
和xmlstarlet
手动完成所有操作
- 将xml转换为csv
- 将csv导入数据库
(也许这不是你想要的,但很方便)
#xml文件的内容
$cat artist.xml
Ae2300d8b0232c06c莎拉 布莱曼(莎拉·布莱曼)悲伤的星期天莎拉 布莱曼(莎拉·布莱曼)Ae2300d8b0232c06c月光女神227.0 TrueTrueBef909D41922984ATRUEBB94FA21258A8B51我和你(2008年奥运会主题曲)(你和我)刘欢莎拉 布莱曼(莎拉·布莱曼)A6682d46bd4bdfc84Ae2300d8b0232c06c我和你 2008北京奥运会主题歌256.0真实BABF3AB3B7EF0E3EDTRUEFALSES 6A47788EF57FF87斯卡伯勒集市莎拉 布莱曼(莎拉·布莱曼)Ae2300d8b0232c06c月光女神251.0真的真的真的真的真的真的真的真的真的真的真的真的真的真的真的真的真的假的真的真的真的真的真的真的真的真的真的真的真的真的真的真的真的真的真的真的真的真的真的真的莎拉 布莱曼(莎拉·布莱曼)AE2300D8B0232C06C交响乐:生活在维也纳275.0TrueTureB0187937A07B940F7TrueFalss7483CC8C44E06BB令人惊叹的优雅莎拉 布莱曼(莎拉·布莱曼)Ae2300d8b0232c06c真爱永恒 - 冬之歌186.0真的真的假的爱莎拉 布莱曼(莎拉·布莱曼)Ae2300d8b0232c06c月光女神371.0真的真的真的真的BF909D41922984ATRUEFLSCFB4989195B44E57和我在一起莎拉 布莱曼(莎拉·布莱曼)Ae2300d8b0232c06c月光女神324.0真正的真实BF909D41922984一个错误7BAFC588178B932CLA Lune莎拉 布莱曼(莎拉·布莱曼)Ae2300d8b0232c06c月光女神173.0真假真假BFEF909D41922984ATRUEFLSE
#使用xmlstarlet将xml转换为csv文件
$xml sel-t-m'//song'-v'concat(id,“,”,name,“,”,duration)'-n artist.xml | sed'$d'>artist.csv
#csv文件的内容
$cat artist.csv
Sa3f6b810d7f98646,阴郁的星期天,227.0
SBB94FA21258B51,我和你(2008年奥运会主题曲)(你和我),256.0
S6A47788BEF7FF87,斯卡伯勒集市,251.0
Sde1aa68da126ddfe,该说再见了,275.0
S7483CC8C44E06BB,神奇恩典,186.0
S2d9683c7230e18de,这份爱,371.0
Scfb4989195b44e57,和我在一起,324.0
S7bafc588178b932c,拉伦,173.0
#创建sqlite数据库
$sqlite3.db
sqlite>创建表歌曲(id、名称、持续时间);
#输入csv模式以导入csv文件
sqlite>.mode csv
sqlite>.import artist.csv歌曲
#检查一切是否正常
sqlite>.mode列
sqlite>上的.header
sqlite>从歌曲中选择*;
id名称持续时间
----------------- ------------- ----------
Sa3f6b810d7f98646阴郁的星期日227.0
SBB94FA21258B51我和你(200 256.0
S6A47788BEF77FF87斯卡伯勒F 251.0
Sde1aa68da126ddfe表示G 275.0的时间
S7483CC8C44E06BB 186.0
S2d9683c7230e18de此爱371.0
Scfb4989195b44e57和我在一起324.0
S7bafc588178b932c拉伦173.0
我知道这是一篇老文章,但我认为值得一提,以供需要一次性解决方案的未来访问者参考:我发现的最简单的方法是使用Libre Office Calc,特别是数据-->XML源代码功能
一旦导入ODS,就可以很容易地将其保存为CSV(即导入到SQLite),但在许多情况下,打开文档表本身就可以满足用户的需要,即使用自动筛选功能
搜索和筛选数据。我处理15K行没有问题
如果任务必须重复执行,则必须编写脚本,Python库是一种很好的方法。但是,我在使用xml.etree
时遇到了一些问题,在我的例子中,LibreOffice是
# content of xml file
$ cat artist.xml
<results><artist><id>Ae2300d8b0232c06c</id><name>莎拉 布莱曼(Sarah Brightman)</name><hotSongs><!--freemusic/song/result/Sa3f6b810d7f98646--><song><id>Sa3f6b810d7f98646</id><name>Gloomy Sunday</name><artist>莎拉 布莱曼(Sarah Brightman)</artist><artistId>Ae2300d8b0232c06c</artistId><album>月光女神</album><duration>227.0</duration><canBeDownloaded>true</canBeDownloaded><hasFullLyrics>true</hasFullLyrics><canBeStreamed>true</canBeStreamed><albumId>Bfef909d41922984a</albumId><hasSimilarSongs>true</hasSimilarSongs><hasRecommendation>false</hasRecommendation></song><!--freemusic/song/result/Sbb94fa21258a8b51--><song><id>Sbb94fa21258a8b51</id><name>我和你(2008年奥运会主题曲)(You And Me)</name><artist>刘欢</artist><artist>莎拉 布莱曼(Sarah Brightman)</artist><artistId>A6682d46bd4bdfc84</artistId><artistId>Ae2300d8b0232c06c</artistId><album>我和你 2008北京奥运会主题歌</album><duration>256.0</duration><canBeDownloaded>true</canBeDownloaded><hasFullLyrics>true</hasFullLyrics><canBeStreamed>true</canBeStreamed><albumId>Babf3ab3b7ef0e3ed</albumId><hasSimilarSongs>true</hasSimilarSongs><hasRecommendation>false</hasRecommendation></song><!--freemusic/song/result/S6a47788bef57ff87--><song><id>S6a47788bef57ff87</id><name>Scarborough Fair</name><artist>莎拉 布莱曼(Sarah Brightman)</artist><artistId>Ae2300d8b0232c06c</artistId><album>月光女神</album><duration>251.0</duration><canBeDownloaded>true</canBeDownloaded><hasFullLyrics>true</hasFullLyrics><canBeStreamed>true</canBeStreamed><albumId>Bfef909d41922984a</albumId><hasSimilarSongs>true</hasSimilarSongs><hasRecommendation>false</hasRecommendation></song><!--freemusic/song/result/Sde1aa68da126ddfe--><song><id>Sde1aa68da126ddfe</id><name>Time To Say Goodbye</name><artist>莎拉 布莱曼(Sarah Brightman)</artist><artistId>Ae2300d8b0232c06c</artistId><album>Symphony: Live In Vienna</album><duration>275.0</duration><canBeDownloaded>true</canBeDownloaded><hasFullLyrics>true</hasFullLyrics><canBeStreamed>true</canBeStreamed><albumId>B0187937a07b940f7</albumId><hasSimilarSongs>true</hasSimilarSongs><hasRecommendation>false</hasRecommendation></song><!--freemusic/song/result/S7483cc8c44e06bbb--><song><id>S7483cc8c44e06bbb</id><name>Amazing Grace</name><artist>莎拉 布莱曼(Sarah Brightman)</artist><artistId>Ae2300d8b0232c06c</artistId><album>真爱永恒 - 冬之歌</album><duration>186.0</duration><canBeDownloaded>true</canBeDownloaded><hasFullLyrics>true</hasFullLyrics><canBeStreamed>true</canBeStreamed><albumId>B38e85a3056c0381c</albumId><hasSimilarSongs>true</hasSimilarSongs><hasRecommendation>false</hasRecommendation></song><!--freemusic/song/result/S2d9683c7230e18de--><song><id>S2d9683c7230e18de</id><name>This Love</name><artist>莎拉 布莱曼(Sarah Brightman)</artist><artistId>Ae2300d8b0232c06c</artistId><album>月光女神</album><duration>371.0</duration><canBeDownloaded>true</canBeDownloaded><hasFullLyrics>true</hasFullLyrics><canBeStreamed>true</canBeStreamed><albumId>Bfef909d41922984a</albumId><hasSimilarSongs>true</hasSimilarSongs><hasRecommendation>false</hasRecommendation></song><!--freemusic/song/result/Scfb4989195b44e57--><song><id>Scfb4989195b44e57</id><name>Here With Me</name><artist>莎拉 布莱曼(Sarah Brightman)</artist><artistId>Ae2300d8b0232c06c</artistId><album>月光女神</album><duration>324.0</duration><canBeDownloaded>true</canBeDownloaded><hasFullLyrics>true</hasFullLyrics><canBeStreamed>true</canBeStreamed><albumId>Bfef909d41922984a</albumId><hasSimilarSongs>true</hasSimilarSongs><hasRecommendation>false</hasRecommendation></song><!--freemusic/song/result/S7bafc588178b932c--><song><id>S7bafc588178b932c</id><name>La Lune</name><artist>莎拉 布莱曼(Sarah Brightman)</artist><artistId>Ae2300d8b0232c06c</artistId><album>月光女神</album><duration>173.0</duration><canBeDownloaded>true</canBeDownloaded><hasFullLyrics>false</hasFullLyrics><canBeStreamed>true</canBeStreamed><albumId>Bfef909d41922984a</albumId><hasSimilarSongs>true</hasSimilarSongs><hasRecommendation>false</hasRecommendation></song></hotSongs></artist></results>
# convert xml to csv file using xmlstarlet
$ xml sel -t -m '//song' -v 'concat(id, ",", name, ",", duration)' -n artist.xml | sed '$d' >artist.csv
# content of csv file
$ cat artist.csv
Sa3f6b810d7f98646,Gloomy Sunday,227.0
Sbb94fa21258a8b51,我和你(2008年奥运会主题曲)(You And Me),256.0
S6a47788bef57ff87,Scarborough Fair,251.0
Sde1aa68da126ddfe,Time To Say Goodbye,275.0
S7483cc8c44e06bbb,Amazing Grace,186.0
S2d9683c7230e18de,This Love,371.0
Scfb4989195b44e57,Here With Me,324.0
S7bafc588178b932c,La Lune,173.0
# create sqlite database
$ sqlite3 song.db
sqlite> CREATE TABLE song(id, name, duration);
# enter csv mode to import csv file
sqlite> .mode csv
sqlite> .import artist.csv song
# check everything is ok
sqlite> .mode column
sqlite> .header on
sqlite> select * from song;
id name duration
----------------- ------------- ----------
Sa3f6b810d7f98646 Gloomy Sunday 227.0
Sbb94fa21258a8b51 我和你(200 256.0
S6a47788bef57ff87 Scarborough F 251.0
Sde1aa68da126ddfe Time To Say G 275.0
S7483cc8c44e06bbb Amazing Grace 186.0
S2d9683c7230e18de This Love 371.0
Scfb4989195b44e57 Here With Me 324.0
S7bafc588178b932c La Lune 173.0