为什么我会得到这个;无效句柄&引用;Python cx_Oracle中的错误?
这个问题与我先前发布的一个问题有关 我有以下代码:为什么我会得到这个;无效句柄&引用;Python cx_Oracle中的错误?,python,cx-oracle,Python,Cx Oracle,这个问题与我先前发布的一个问题有关 我有以下代码: 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() p
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()
template.read()
当我打印行时,我得到以下信息:
[(<cx_Oracle.LOB object at 0x0000000001D49990>,)]
现在,当我交换orcl.close()
和template.read()
时,就像这样:
template.read()
orcl.close()
我一点错误都没有
此外,这仅在数据类型为LOB时发生。如果我正在检索的数据是字符串、整数或任何其他非LOB数据,
print rows
将打印我的所有数据,并且template.read()
不会抛出错误,无论它是在或.close()之前还是之后。我的问题是,为什么会发生这种情况?LOB上的文档说Oracle通过只返回LOB的句柄而不是LOB数据本身来优化查询。我的猜测是cx\u Oracale
遵循此约定,并且cx\u Oracle.LOB
对象只是远程数据的代理。因此,关闭与服务器的连接也会终止代理。@sr2222啊,好的。这是有道理的。你觉得你能给我指一下那些说这句话的文档吗?我想直接从甲骨文那里找到一些东西,但是这个@sr2222太棒了,谢谢!LOB上的文档说Oracle通过只返回LOB的句柄而不是LOB数据本身来优化查询。我的猜测是cx\u Oracale
遵循此约定,并且cx\u Oracle.LOB
对象只是远程数据的代理。因此,关闭与服务器的连接也会终止代理。@sr2222啊,好的。这是有道理的。你觉得你能给我指一下那些说这句话的文档吗?我想直接从甲骨文那里找到一些东西,但是这个@sr2222太棒了,谢谢!
template.read()
orcl.close()