У меня есть приложение flask, которое использует SQLAlchemy. Для одной из конечных точек '/items'
я хочу вернуть список элементов.
Это просто ItemModel.query.all()
, где ItemModel
- это класс, представляющий элементы.
Но, скажем, я хочу разрешить параметры строки запроса URL, например, '/items?type=book'
Если бы я жестко закодировал, это было бы просто с TopicModel.query.filter_by(type=book).all()
С кратным это могло бы быть TopicModel.query.filter_by(type=book).filter_by(colour=yellow).all()
Но как я мог эффективно сгенерировать этот запрос, чтобы он фильтровал только по параметру, если пользователь указывает этот параметр в строке запроса?
Должно ли что-то подобное работать? Если это так, будет ли он выполнять несколько запросов к базе данных (и, следовательно, будет медленным и ресурсоемким)?
def get(self):
type = request.args.get('type')
color = request.args.get('color')
size = request.args.get('size')
query = ItemModel.query
if type:
query = query.filter_by(type=type)
if color:
query = query.filter_by(color=color)
if size:
query = query.filter_by(size=size)
return {'items' : query.all() }