Dit maakt gebruik van de (nog niet uitgebrachte) versie van cx_Oracle die het binden van objecten en ander meer geavanceerd gebruik van objecten ondersteunt. Met behulp van het voorbeeld dat is meegeleverd met cx_Oracle om het invoegen van geometrie te demonstreren, transformeert de volgende code het object dat op die manier is gemaakt in JSON. De functie ObjectRepr() die hieronder is opgenomen, zou moeten werken voor elk object dat door Oracle wordt geretourneerd. Het leest eenvoudig de metadata over het object en verandert het object in een woordenboek van attributen of een lijst met waarden.
import cx_Oracle
import json
connection = cx_Oracle.Connection("user/[email protected]")
typeObj = connection.gettype("SDO_GEOMETRY")
cursor = connection.cursor()
cursor.execute("""
select Geometry
from TestGeometry
where IntCol = 1""")
obj, = cursor.fetchone()
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("JSON:", json.dumps(ObjectRepr(obj)))