【发布时间】:2020-09-24 15:38:33
【问题描述】:
我正在尝试使用 Flask 构建一个练习 API。问题是我正在尝试解决此端点是否会出现数据库中大量行的问题。
到目前为止,我唯一确定的与输入大小有关的是查询和序列化。代替 query.all() 我可以少用几列,但这是我想出的唯一方法。
有什么想法吗?
@app.route(PREFIX + '/games', methods=['GET'])
def get_games():
games_list = []
if len(request.args) == 0:
all_games = Game.query.all()
result = games_schema.dump(all_games)
for g in result:
games_list.append(
Feature(geometry=g["geometry"], properties=g["properties"]))
games_fc = FeatureCollection(games_list)
return jsonify(games_fc)
else:
filters = {key: value for key, value in request.args.items() if key in [
"category", "location", "district"]}
allowed_categories = []
allowed_locations = []
allowed_districts = []
for c in db.session.query(Game.category).distinct():
allowed_categories.append(c.category)
for l in db.session.query(Game.location).distinct():
allowed_locations.append(l.location)
for d in db.session.query(Game.district).distinct():
allowed_districts.append(d.district)
for key, value in filters.items():
if key == "category":
if value not in allowed_categories:
abort(400, "You enetered a non-valid category")
elif key == "location":
if value not in allowed_locations:
abort(400, "You entered a non-valid location")
elif key == "district":
if value not in allowed_districts:
abort(400, "You entered a non-valid district")
filtered_game = Game.query.filter_by(**filters)
result = games_schema.dump(filtered_game)
for g in result:
games_list.append(
Feature(geometry=g["geometry"], properties=g["properties"]))
games_fc= FeatureCollection(games_list)
return jsonify(games_fc)
【问题讨论】:
标签: python-3.x sqlite flask sqlalchemy marshmallow