python - 我想解析 xml 数据并将其作为 mysql 查询进行处理

标签 python mysql xml python-3.x xml-parsing

我想解析 xml。

  • 逐一读取数据,并且
  • 将数据放入 mysql 查询字段中,并且
  • 将结果回复写入文件。

接下来它应该转到下一个元素,依此类推。

我无法为此构建 for 循环。

请帮忙!!

<小时/>

我明白了

for ip in ip_list,uid in uid_list,pwd in pwd_list,port in port_list,query in query_list,file in file_list,dbname in dbname_list:
<小时/>

请找到下面的xml内容

<?xml version="1.0"?>
<jellydb>
<device>
<ip>127.0.0.1</ip>
<port>1433</port>
<dbname>testdb</dbname>
<uid>gowtham</uid>
<pwd>accessallowed</pwd>
<query>select * from IoT</query>
<file>/var/log/db</file>
</device>

<device>
<ip>20.0.0.1</ip>
<port>1433</port>
<dbname>test1db</dbname>
<uid>rohin</uid>
<pwd>accessdenied</pwd>
<query>select * from IoT where brand = 'BMW'</query>
<file>/var/log/db1</file>
</device>
</jellydb>

用于解析的Python代码如下:

from xml.etree import ElementTree
import mysql.connector


dom = ElementTree.parse('C:\Users\WELCOME\Desktop\sample.xml')
ip = dom.findall('device/ip')
file = dom.findall('device/file')
port = dom.findall('device/port')
query = dom.findall('device/query')
uid = dom.findall('device/uid')
pwd = dom.findall('device/pwd')
dbname = dom.findall('device/dbname')


ip_list = [t.text for t in ip]
file_list = [t.text for t in file]
port_list = [t.text for t in port]
query_list = [t.text for t in query]
uid_list = [t.text for t in uid]
pwd_list = [t.text for t in pwd]
dbname_list = [t.text for t in dbname]

i = 0

mysql部分

db =mysql.connector.Connect(host=<ip_list[1st element in list]>,port=<port_list[[1st element in list]>,user=<uid_list[[1st element in list]>,password=<pwd_list[[1st element in list]>,database=<db_name[[1st element in list]>)
    #cur = db.cursor()
    #result_log = cur.execute(<query_list[[1st element in list]>)
    #re_file = open(<file_list[[1st element in list]>,wr)
    #<file_list[[1st element in list]>.write(result_log)

最佳答案

考虑在所有列表中进行 zip 循环,假设长度相等,将结果迭代地附加到日志文件:

cur = db.cursor()
strSQL = "INSERT INTO myTable (`IP`, `File`, `Port`, `Query`, `UID`, `PWD`, `DBname`) " + \
          "VALUES(%s, %s, %s, %s, %s, %s, %s)"

for i,f,pt,q,u,pw,d in zip(ip_list, file_list, port_list, query_list, uid_list, pwd_list, dbname_list):
    result_log = cur.execute(strSQL, (i,f,pt,q,u,pw,d))
    with open('ResultLog.txt', 'a') as f:   # APPEND MODE
       f.write(result_log)

或者使用executemany来自元组列表:

sqltuples = [(i,f,pt,q,u,pw,d) for i,f,pt,q,u,pw,d in 
             zip(ip_list, file_list, port_list, query_list, uid_list, pwd_list, dbname_list)]

cur.executemany(strSQL, sqltuples)

关于python - 我想解析 xml 数据并将其作为 mysql 查询进行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41200402/

相关文章:

python - 如果我使用 Cloud Foundry 和 python buildpack,如何安装 ffmpeg

php - 使用 LEFT JOIN 计算行数

mysql - 优化 select 中的派生表

Python xml - 删除空格以对齐 xml 文档

xml - XSD 规范中词汇表示与规范表示之间的区别

python - "new text"标签随机出现在 Plotly 图中

python - 按值索引python字典

xml - 转换为xml时的Groovy Grails测试用例错误

python - 从 JSON 写入 CSV 时出现 UnicodeEncodeError

php - 外键可以引用具有复合(即两列的组合)键的表吗?