Detta använder den (ännu ej släppta) versionen av cx_Oracle som stöder bindning av objekt och annan mer avancerad användning av objekt. Genom att använda exemplet som medföljer cx_Oracle för att demonstrera införandet av geometri, kommer följande kod att omvandla objektet som skapats på det sättet till JSON. Funktionen ObjectRepr() som ingår nedan bör fungera för alla objekt som returneras från Oracle. Den läser helt enkelt metadata på objektet och förvandlar objektet till en ordbok med attribut eller en värdelista.
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)))