use*_*084 0 python sqlalchemy flask-sqlalchemy
我想以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)
Run Code Online (Sandbox Code Playgroud)
如果我使用该first()方法,此代码很有效.但是,我需要使用它all()来获得所有结果.当我这样做时,我得到以下错误.
country_dict = country.__dict__
AttributeError: 'list' object has no attribute '__dict__'
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能将整个结果列表作为JSON返回?
您需要为列表中的每个项目执行"jsonify准备步骤",因为.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)
Run Code Online (Sandbox Code Playgroud)
可能更好的只是明确地返回有关每个国家/地区的数据,而不是试图神奇地对实例进行jsonify.
@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)
Run Code Online (Sandbox Code Playgroud)