我注意到如果我使用cx_Oracle.Cursor对象迭代结果,auto_convert_lobs
参数不能按预期工作。
从我读过的文档中,cx_Oracle默认会将Clobs转换为String:http://docs.sqlalchemy.org/en/latest/dialects/oracle.html#lob-objects
我迭代的查询是一个返回光标而不是行的函数:
SELECT returns_a_cursor() FROM dual
-- pseudo code of returns_a_cursor():
FUNCTION returns_a_cursor() RETURN SYS_REFCURSOR
sql := 'SELECT ...';
OPEN cursor FOR sql;
RETURN cursor;
我使用函数而不是直接查询的唯一原因仅在于可读性和组织性。
我的python代码看起来像这样
engine = create_engine('oracle+cx_oracle://...')
conn = engine.connect()
result = conn.execute('SELECT returns_a_cursor() FROM dual').fetchone()
for row in result[0]:
print row
这个游标' method会将我的CLOB数据类型返回到cx_Oracle.LOB数据而不是字符串。
如果我更改我的代码以执行没有该函数的查询,它将能够将CLOB数据转换为字符串。
engine = create_engine('oracle+cx_oracle://...')
conn = engine.connect()
result = conn.execute('SELECT a_clob_column FROM a_table')
for row in result:
print row
有没有办法可以在我的用例中保留auto_convert_lobs
设置?