如何检索包含特殊字符的XMLTYPE数据?

时间:2019-05-14 14:49:51

标签: character-encoding cx-oracle

我想使用cx_oracle从Oracle表中检索XMLTYPE数据。 数据如下:

<infos>
 <Comment/>
 <Observation>àéèç</Observation>
 <Level>L3</Level>
 <Duration/>
 <Cause/>
 <Depot> Haren </Depot>
 <Resolution/>
</infos>

这是我的代码:

#!/usr/bin/python

from __future__ import print_function
import cx_Oracle




# Connection to RTDIAG
try:
    dsn_test =   cx_Oracle.makedsn(host='xxxxx',port='1521',service_name='xxxxx')
    con_test = cx_Oracle.connect(user='xxxx', password='xxxxx',dsn=xxxx)

except cx_Oracle.InterfaceError:
    print ("Impossible to connect to the DB!")
    print ("***exit script***")
    quit()

ID_record = 1729

cursor = con_test.cursor()

query = """select a.content.getClobVal() from emb_log a where ID = :id and uncompleted_record=1
"""
cursor.execute(query,id=1729)

xml_retrieved = cursor.fetchone()[0].read() #string
print (xml_retrieved)

这就是我得到的

<infos>
 <Comment/>
 <Observation>aeec</Observation>
 <Level>L3</Level>
 <Duration/>
 <Cause/>
 <Depot> Haren </Depot>
 <Resolution/>
</infos>

不能正确检索XML子级中包含的特殊字符。它们以“ ascii like”字符转换。

为什么以及如何完全按照XML在数据库中显示的方式获取XML?

谢谢。

1 个答案:

答案 0 :(得分:0)

  • 设置您的NLS环境。您可能会发现它最容易使用 的 encoding 连接时选择。
  • 为了提高性能,您将希望通过OutputTypeHandler
  • 获取CLOB