Questo sta usando la versione (non ancora rilasciata) di cx_Oracle che supporta l'associazione di oggetti e altri usi più avanzati degli oggetti. Utilizzando l'esempio fornito con cx_Oracle per dimostrare l'inserimento della geometria, il codice seguente trasformerà l'oggetto creato in questo modo in JSON. La funzione ObjectRepr() inclusa di seguito dovrebbe funzionare per qualsiasi oggetto restituito da Oracle. Legge semplicemente i metadati sull'oggetto e trasforma l'oggetto in un dizionario di attributi o in un elenco di valori.
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)))