Python中的auto_convert_lobs不能处理cx_Oracle.Cursor对象

时间:2017-05-30 22:56:29

标签: python sqlalchemy cx-oracle

我注意到如果我使用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设置?

0 个答案:

没有答案