我想将查询结果作为JSON返回。我使用以下路由将一个模型实例作为JSON对象返回。
@mod.route('/autocomplete/<term>', methods=['GET'])
def autocomplete(term):
country = Country.query.filter(Country.name_pt.ilike('%'+ term + '%')).first()
country_dict = country.__dict__
country_dict.pop('_sa_instance_state', None)
return jsonify(json_list=country_dict)
如果我使用first()
方法,此代码效果很好。但是,我需要使用all()
来获取所有结果。当我这样做时,我收到以下错误。
country_dict = country.__dict__
AttributeError: 'list' object has no attribute '__dict__'
我应该怎么做才能将整个结果列表作为JSON返回?
答案 0 :(得分:5)
你需要这样做&#34; jsonify准备步骤&#34;对于列表中的每个项目,因为.all()
返回模型实例列表,而不仅仅是.first()
之类的一个实例。处理每个__dict__
的副本,这样就不会搞乱SQLAlchemy对实例的内部表示。
@mod.route('/autocomplete/<term>', methods=['GET'])
def autocomplete(term):
countries = []
for country in Country.query.filter(Country.name_pt.ilike('%' + term + '%'):
country_dict = country.__dict__.copy()
country_dict.pop('_sa_instance_state', None)
countries.append(country_dict)
return jsonify(json_list=countries)
可能更好的方法是明确地返回有关每个国家/地区的数据,而不是试图对该实例进行神奇的json化。
@mod.route('/autocomplete/<term>', methods=['GET'])
def autocomplete(term):
countries = []
for country in Country.query.filter(Country.name_pt.ilike('%' + term + '%'):
countries.append({
'id': country.id,
'name': country.name_pt,
})
return jsonify(countries=countries)