我需要将数组保存在列中。我当前正在创建一个类型为VARRAY并使用可以正常工作的类型。但是,当我查询IN PYTHON表(在db上工作正常)时,该数组字段无法转换为python数组。
我尝试通过python脚本中的sql查询更改类型,但无济于事
CREATE OR REPLACE TYPE params_array IS VARRAY(25) of number(25);
create TABLE dependencies
(
job_name varchar2(15),
parameters params_array,
function_name varchar2(225)
)
Select parameters from dependencies:
预期结果:
([10,10])
实际:
(cx_Oracle.Object SYS.PARAMS_ARRAY at 0x7fd9620d02b0)
答案 0 :(得分:1)
要将Oracle集合对象转换为cx_Oracle
中的Python列表,请使用.aslist()
方法:
>>> c = conn.cursor()
>>> for row in c.execute("SELECT parameters FROM dependencies"):
... print(row[0].aslist())
...
[10, 20]
最后,真的不会在SYS
模式中创建对象,就像您显然已经使用PARAMS_ARRAY
类型创建对象一样。这可能会干扰Oracle数据库的运行。如果您一直在此模式中创建对象,Oracle也可以拒绝支持您。对于数据库中内置的任何其他模式,这可能也是正确的。