我想解析 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/