これは、オブジェクトのバインドおよびその他のより高度なオブジェクトの使用をサポートする(まだリリースされていない)バージョンのcx_Oracleを使用しています。ジオメトリの挿入を示すためにcx_Oracleで提供されているサンプルを使用して、次のコードはその方法で作成されたオブジェクトをJSONに変換します。以下に含まれるObjectRepr()関数は、Oracleから返されたすべてのオブジェクトに対して機能するはずです。オブジェクトのメタデータを読み取り、オブジェクトを属性の辞書または値のリストに変換するだけです。
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)))