将阵列保存到Oracle数据库

时间:2019-09-11 18:15:34

标签: python oracle cx-oracle

我需要将数组保存在列中。我当前正在创建一个类型为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)

1 个答案:

答案 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也可以拒绝支持您。对于数据库中内置的任何其他模式,这可能也是正确的。