Как читать CX Oracle.Данные LOB в Python?
у меня есть этот код:
dsn = cx_Oracle.makedsn(hostname, port, sid)
orcl = cx_Oracle.connect(username + '/' + password + '@' + dsn)
curs = orcl.cursor()
sql = "select TEMPLATE from my_table where id ='6'"
curs.execute(sql)
rows = curs.fetchall()
print rows
template = rows[0][0]
orcl.close()
print template.read()
когда я делаю print rows
, Я получаю это:
[(<cx_Oracle.LOB object at 0x0000000001D49990>,)]
однако, когда я делаю print template.read()
, Я получаю эту ошибку:
cx_Oracle.DatabaseError: неверный дескриптор!
как мне получить и прочитать эти данные? Спасибо.
2 ответов
я узнал, что это происходит в случае, когда соединение с Oracle закрывается до cx_Oracle.БОЛЬШОЙ ОБЪЕКТ.использовать read() метод.
orcl = cx_Oracle.connect(usrpass+'@'+dbase)
c = orcl.cursor()
c.execute(sq)
dane = c.fetchall()
orcl.close() # before reading LOB to str
wkt = dane[0][0].read()
а я: DatabaseError: недопустимый дескриптор!
но работает следующий код:
orcl = cx_Oracle.connect(usrpass+'@'+dbase)
c = orcl.cursor()
c.execute(sq)
dane = c.fetchall()
wkt = dane[0][0].read()
orcl.close() # after reading LOB to str
разобрался. Я должен сделать что-то вроде этого:
curs.execute(sql)
for row in curs:
print row[0].read()