遍历Oracle.LOB XML列表并返回表中的一行

时间:2020-11-05 17:44:35

标签: python xml oracle xml-parsing elementtree

我有以下查询:

import cx_Oracle
connstr = 'str/str@serv'
conn = cx_Oracle.connect(connstr)

cursor = conn.cursor()

cursor.execute("SELECT FILE_CREATION_DATE, FILE_DATA FROM CRS.CRS_FILES WHERE ROWNUM <= 3")

然后我将其放入具有以下代码的列表中:

lst = []
for i in cursor:
    for j in i:
        lst.append(j)
        
lst
[<cx_Oracle.LOB at 0x9507bd8>,
 <cx_Oracle.LOB at 0x9154fb0>,
 <cx_Oracle.LOB at 0x13c05c0>]

lst[0:len(lst)]
[<cx_Oracle.LOB at 0x9507bd8>,
 <cx_Oracle.LOB at 0x9154fb0>,
 <cx_Oracle.LOB at 0x13c05c0>,
'<?xml version="1.0" encoding="utf-8"?><REPORT xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/CrashReport.DataLayer.v20170...,
'<?xml version="1.0" encoding="utf-8"?><REPORT xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/CrashReport.DataLayer.v20170...,
'<?xml version="1.0" encoding="utf-8"?><REPORT xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/CrashReport.DataLayer.v20170...']

有XML(没有全部粘贴)。

我能够通过执行以下操作来解析数据:

plist = []
plist = ''.join(lst[3].read())
import xml.etree.ElementTree as ET
tree = ET.ElementTree(ET.fromstring(plist))
root = tree.getroot()
print(tree.getroot().tag)   {http://schemas.datacontract.org/2004/07/CrashReport.DataLayer.v20170201}REPORT


vehicle_elements = root.findall('.//*')
    for child in vehicle_elements:
            data = print("Tag: {0} text: {1}".format(child.tag, child.text, child.attrib))

Tag: {http://schemas.datacontract.org/2004/07/CrashReport.DataLayer.v20170201}ACRSREPORTTIMESTAMP text: 2017-10-09T10:50:02.04166
Tag: {http://schemas.datacontract.org/2004/07/CrashReport.DataLayer.v20170201}AGENCYIDENTIFIER text: Milwaukee
Tag: {http://schemas.datacontract.org/2004/07/CrashReport.DataLayer.v20170201}AGENCYNAME text: Milwaukee Police Department
Tag: {http://schemas.datacontract.org/2004/07/CrashReport.DataLayer.v20170201}APPROVALDATA text: None
...

这是我的问题

如您所见,xml解析/ ET操作仅执行lst中的第一行。 我如何遍历lst中的所有CLOB(它至少适用于上面的一行),然后将所有已处理的数据(上面的最终输出)输出到一个表中,其中每一列都是一个标记,并且每一行包含lst中的一个元素及其对应的值(基于其所在的tag列)

我想将其输出为CSV,一次完成以上所有行,或者使用其他基于性能的选项将是最好的,因为有大量这些数据。我只是在对这三行进行测试。

以查询中的这三行为例,理想的输出如下所示: enter image description here

谢谢。

0 个答案:

没有答案
相关问题