将sqlalchemy类序列化为json

时间:2012-02-22 13:04:03

标签: python json sqlalchemy

我正在尝试将sqlalchemy查询的结果(列表)序列化为json。

这是班级:

class Wikilink(Base):

    __tablename__='Wikilinks'
    __table_args__={'extend_existing':True}

    id = Column(Integer,autoincrement=True,primary_key=True)
    title = Column(Unicode(350))
    user_ip = Column(String(50))
    page = Column(String(20))
    revision = Column(String(20))
    timestamp = Column(String(50))

我想我的问题在于__repr__(self):功能。 我试过像:

return '{{0}:{"title":{1}, "Ip":{2}, "page":{3} ,"revision":{4}}}'.format(self.id,self.title.encode('utf-8'),self.user_ip,self.page,self.revision)

或:

return '{"id"={0}, "title"={1}, "Ip"={2}}'.format(self.id,self.title.encode('utf-8'),self.user_ip.encode('utf-8'),self.page,self.revision)

我得到了:

TypeError(repr(o) + " is not JSON serializable")
ValueError: Single '}' encountered in format string

我试过了:

return '{id=%d, title=%s, Ip=%s}'%(self.id,self.title.encode('utf-8'),self.user_ip.encode('utf-8'))

我得到了:

TypeError: {id=8126, title=1 בדצמבר, Ip=147.237.70.106} is not JSON serializable

添加“”(根据JSON格式),如下所示:"id"="%d", "title"="%s", "Ip"="%s"也无济于事。

我知道这应该是死的简单但我无法做到这一点

实际上瓶子是自动处理jsonification部分,但是试图在结果上调用json.dumps会给我带来同样的错误。

2 个答案:

答案 0 :(得分:3)

您可以定义,例如,您可以定义自己的to_dict方法,而不是尝试将json转换为字符串,该方法返回您尝试创建的字典结构,然后生成json,那个结构:

>>> import json
>>> d = {'id':8126, 'title':u'1 בדצמבר', 'ip':'147.237.70.106'}
>>> json.dumps(d)
'{"ip": "147.237.70.106", "id": 8126, "title": "1 \\u05d1\\u05d3\\u05e6\\u05de\\u05d1\\u05e8"}'

答案 1 :(得分:1)

我不确定我理解你的尝试。你不能建立dict并让json.dumps()为你做这项工作吗?

类似的东西:

>>> class Foo:
...     id = 1
...     title = 'my title'
...     to_jsonize = ['id', 'title']
>>>
>>> dct = {name: getattr(Foo,name) for name in Foo.to_jsonize}
>>> import json
>>> json.dumps(dct)
'{"id": 1, "title": "my title"}'