我正在尝试用Flask/Python对SQLAlchemy结果集进行jsonify。
烧瓶邮件列表建议使用以下方法http://librelist.com/browser//flask/2011/2/16/jsonify-sqlalchemy-pagination-collection-result/#04a0754b63387f87e59dda564bde426e:
return jsonify(json_list = qryresult)
但是我得到了以下错误:
TypeError: <flaskext.sqlalchemy.BaseQuery object at 0x102c2df90>
is not JSON serializable
我在这里俯瞰什么?
我发现了这样一个问题:How to serialize SqlAlchemy result to JSON?看起来非常相似,但是我不知道Flask是否有一些魔法可以像邮件列表所建议的那样让它变得更容易。
编辑:为了澄清,这就是我的模特
class Rating(db.Model):
__tablename__ = 'rating'
id = db.Column(db.Integer, primary_key=True)
fullurl = db.Column(db.String())
url = db.Column(db.String())
comments = db.Column(db.Text)
overall = db.Column(db.Integer)
shipping = db.Column(db.Integer)
cost = db.Column(db.Integer)
honesty = db.Column(db.Integer)
communication = db.Column(db.Integer)
name = db.Column(db.String())
ipaddr = db.Column(db.String())
date = db.Column(db.String())
def __init__(self, fullurl, url, comments, overall, shipping, cost, honesty, communication, name, ipaddr, date):
self.fullurl = fullurl
self.url = url
self.comments = comments
self.overall = overall
self.shipping = shipping
self.cost = cost
self.honesty = honesty
self.communication = communication
self.name = name
self.ipaddr = ipaddr
self.date = date
以下是通常对我来说足够的:
我创建了一个用于模型的序列化mixin。序列化函数基本上获取SQLAlchemy检查器公开的任何属性并将其放入dict中
现在需要做的就是用
Serializer
mixin类扩展SQLAlchemy模型。如果有不希望公开的字段或需要特殊格式的字段,只需重写模型子类中的
serialize()
函数。在控制器中,您只需调用结果上的
serialize()
函数(如果查询结果为列表,则调用serialize_list(l)
):我也有同样的需要,序列化成json。看看this question。它展示了如何以编程方式发现列。所以,从那开始我创建了下面的代码。它对我有效,我将在我的网络应用程序中使用它。快乐编码!
似乎你还没有执行你的查询。尝试以下操作:
[编辑]:jsonify的问题是,通常无法自动对对象进行jsonify。即使Python的datetime失败;)
我过去所做的是向需要序列化的类添加一个额外的属性(比如
serialize
)。现在我可以做的是:
希望这有帮助;)
[编辑2019]: 如果有更复杂的对象或循环引用,请使用类似marshmallow的库。
相关问题 更多 >
编程相关推荐