문제는 cx_Oracle.OBJECT 읽기() 메소드가없는 것입니다. 대신, 다른 Python 객체와 마찬가지로 읽고 쓸 수있는 속성을 가지고 있습니다.
다음과 같은 일반적인 코드가 작동 cx_Oracle과의 출시되지 않은 버전을 사용 :
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
print(ObjectRepr(bf))
당신이 5.2.1을 사용하는 경우,하지만, 내성적 코드의 일부를 사용할 수 없습니다. 다행히도, 당신은 그것을 필요로하지 않습니다. 당신은 그 출력의 시작 부분에 당신에게 속성의 목록이 표시됩니다 SQL * 플러스의 유형을 설명 할 수
당신은 파이썬 코드에서 다음을 수행 할 수 있도록해야
desc ordsys.ordimage
:
print(bf.HEIGHT)
print(bf.WIDTH)
print(bf.CONTENTLENGTH)
print(bf.FILEFORMAT)
을 SOURCE 속성은 또 다른 객체이므로 같은 방식으로 속성에 액세스 할 수 있습니다.
등의 속성에 유의하십시오.
bf.SOURCE.LOCALDATA 특성은 현재 BLOB 유형이며 현재 지원되지 않습니다. 익명의 PL/SQL 블록을 사용하여 해당 값에 액세스 할 수 있습니다.
var = cursor.var(cx_Oracle.BLOB)
cursor.execute("""
declare
t_Image ordsys.ordimage;
begin
select Image
into t_Image
from T
where rownum <= 1;
:1 := t_Image.source.localdata;
end;""", (var,))
blob = var.getvalue()
print("Image data is:", blob.read())
속성이 아닌 이미지의 내용을 가져 오는 방법을 알려주십시오. – mtoloo
ORDSYS.ORDIMAGE를 사용하지 않았지만 bf.SOURCE.LOCALDATA에 액세스해야한다고 생각합니다. PL/SQL 코드를 사용하여 먼저 액세스하여 확인할 수 있습니다. –
먼저 PL/SQL을 확인하는 방법을 모르지만 bf.SOURCE.LOCALDATA를 사용하면 'NotSupportedError : ExternalObjectVar_GetAttributeValue() : 처리되지 않은 데이터 형식 113'예외가 발생합니다. – mtoloo