通过cx从用户定义的类型中提取数据_

2024-10-01 15:47:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过cx_Oracle从用户定义类型(UDT)中提取数据。以下是UDT结构:

CREATE OR REPLACE TYPE graphic_component AS OBJECT (
   type             NUMBER(6),
   source_type      NUMBER(4),
   meta_type_id     VARCHAR2(50 CHAR),
   name             VARCHAR2(100 CHAR),
   extension_info   VARCHAR2(500 CHAR),
   symbology_tokens VARCHAR2(2000 CHAR)
);

CREATE OR REPLACE TYPE graphic_component_array AS
      VARRAY (10000) OF graphic_component;

下面是一个使用Python的示例:

^{pr2}$

您可以看到有一个很好的用户定义类型,但我不能从这个或任何其他UDT中提取数据。我试图检查对象的所有属性,找到了first()、getelement()和last()方法。但这些函数只返回0。在

是否有任何方法可以通过cx_Oracle从UDT中提取数据,或者是否有其他方法来获取数据。在

更新

<cx_Oracle.Object GRAPHIC_COMPONENT_ARRAY at 0x26c9f10>
Traceback (most recent call last):
  File "C:/Users/petr.silhak/PycharmProjects/migration-to-postgresql/test_parsing.py", line 34, in <module>
    print(ObjectRepr(complex[0][0]))
  File "C:/Users/petr.silhak/PycharmProjects/migration-to-postgresql/test_parsing.py", line 9, in ObjectRepr
    value = ObjectRepr(value)
  File "C:/Users/petr.silhak/PycharmProjects/migration-to-postgresql/test_parsing.py", line 14, in ObjectRepr
    value = getattr(obj, attr.name)
cx_Oracle.DatabaseError: DPI-1014: conversion between Oracle type 2010 and native type 3000 is not implemented

Tags: 数据方法typeusersfilecomponentoraclecx
1条回答
网友
1楼 · 发布于 2024-10-01 15:47:08

{cx{u处理复杂代码中的类型 节选:

def ObjectRepr(obj):
    if obj.type.iscollection:
        returnValue = []
        for value in obj.aslist():
            if isinstance(value, cx_Oracle.Object):
                value = ObjectRepr(value)
            returnValue.append(value)
    else:
        returnValue = {}
        for attr in obj.type.attributes:
            value = getattr(obj, attr.name)
            if value is None:
                continue
            elif isinstance(value, cx_Oracle.Object):
                value = ObjectRepr(value)
            returnValue[attr.name] = value
    return returnValue  

您可以像ObjectRepr(complex[0][0])一样使用它,当然如果len(complex)>0

相关问题 更多 >

    热门问题