首先,我要处理的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)
)
/

我已经验证了数据库中的数据正确(放入一些测试数据之后)。 我现在尝试编写一个JSONEncoder来将Oracle address_t类型解析为可序列化的JSON类型。 这是我一直在玩的功能:

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

  ask by Pat translate from so

本文未有回复,本站智能推荐: