Как получить данные XMLTYPE, содержащие специальные символы? - PullRequest
0 голосов
/ 14 мая 2019

Я хочу получить данные XMLTYPE из таблицы Oracle, используя cx_oracle.данные выглядят так:

<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 именно так, как он выглядит в БД?

Спасибо.

1 Ответ

0 голосов
/ 15 мая 2019
  • Установите вашу среду NLS. Вы, вероятно, найдете его самым простым в использовании encoding вариант при подключении.
  • для производительности, вы хотите получить CLOB через OutputTypeHandler
...