Вывести значение в Python из базы данных oracle - PullRequest
2 голосов
/ 15 февраля 2020

У меня проблема при отображении значения в python, полученного из таблицы oracle в поле CLOB:

Oracle запрос:

SELECT EXTRACTVALUE(xmltype(t.xml), '/DCResponse/ResponseInfo/ApplicationId') 
  FROM table t 
 WHERE id = 2

Значение, отображаемое в Oracle Клиент

5701200

Python код

import cx_Oracle 
conn = cx_Oracle.Connection("user/pwd@localhost:1521/orcl")
cursor = conn.cursor()
cursor.execute("""SELECT EXTRACTVALUE(xmltype(t.xml),'/DCResponse/ResponseInfo/ApplicationId') FROM table t where id = 2""")
for row in cursor:
print(row)

Python Консоль: ничего не отображается !!! Я хочу показать: 5701200

Пожалуйста, помогите. С наилучшими пожеланиями Джанкарло

Ответы [ 2 ]

1 голос
/ 15 февраля 2020

Есть только несколько проблем с вашим кодом:

  • Замените cx_Oracle.Connection на cx_Oracle.connect
  • Будьте осторожны с отступами, связанными с print(row)
  • Тройные двойные кавычки в операторе SELECT являются избыточными, замените их на одинарные двойные кавычки
  • Предпочитают использовать print(row[0]), чтобы вернуть желаемое число, а не напечатанный кортеж.

    import cx_Oracle 
    conn = cx_Oracle.connect('user/pwd@localhost:1521/orcl')
    cursor = conn.cursor()
    
    query  = "SELECT EXTRACTVALUE(xmltype(t.xml),'/DCResponse/ResponseInfo/ApplicationId')"
    query += "  FROM tab t "
    query += " WHERE t.ID = 2 "
    
    cursor.execute( query )
    for row in cursor:
        print(row[0])
    

Назначение запроса переменной не требуется, как указано в моем случае, но предпочтительнее использовать для приличного отображения длинного оператора SELECT.

0 голосов
/ 15 февраля 2020

Если вы хотите перебрать результат, используйте это:

for row in cursor.execute("sql_query")
    print(row)

или вы можете выбрать каждую строку следующим образом:

cursor = conn.cursor()
cursor.execute("sql_query")
while True:
    row = cursor.fetchone()
    print(row)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...