まず、私が扱っているSQL:
CREATE OR REPLACE TYPE address_t AS OBJECT
(
street VARCHAR2(80),
city VARCHAR2(80),
state_abbr CHAR(2),
zip_code DECIMAL(5)
)
/
CREATE TABLE branch
(
id DECIMAL(12) NOT NULL,
address address_t
PRIMARY KEY(id)
)
/
データベース内のデータが正しいことを確認しました (いくつかのテスト データを入力した後)。Oracle型をシリアライズ可能な JSON 型としてJSONEncoder
解析するための を記述しようとしています。address_t
これが私が遊んでいる機能です:
class ObjectParser(json.JSONEncoder):
def default(self, o):
if str(type(o)) == "<type 'cx_Oracle.OBJECT'>":
print "Zipcode: %s" % o.ZIP_CODE
if str(o.type).find("ADDRESS_T") != -1:
return { "street" : o.STREET, "city": o.CITY,
"state_abbr": o.STATE_ABBR, "zip_code": o.ZIP_CODE }
elif str(o.type).find("PHONENUMBER_T") != -1:
return { "area_code" : o.AREA_CODE,
"phone_number": o.PHONE_NUMBER }
return json.JSONEncoder.default(self, o)
# ...
con = getdb()
cur = con.cursor()
cur.execute("SELECT * FROM BRANCH")
res = cursor.fetchall()
print json.dumps(res, cls=ObjectParser)
と書かれている行には、そこにあるタイプZipcode:
の他のすべてのプロパティがあり、それらは正常に出力されます。address_t
何か案は?
実際のエラーは次のとおりです。
File "query.py", line 14, in default
print "Zipcode: %s" % o.ZIP_CODE
cx_Oracle.NotSupportedError: ExternalObjectVar_GetAttributeValue():
unhandled data type 7