Скажем, у меня есть такая модель:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
hometown = db.Column(db.String(140))
university = db.Column(db.String(140))
Чтобы получить список пользователей из Нью-Йорка, это мой запрос:
User.query.filter_by(hometown='New York').all()
Чтобы получить список пользователей, которые идут в USC, это мой запрос:
User.query.filter_by(university='USC').all()
И чтобы получить список пользователей из Нью-Йорка и кто отправляется в USC, это мой запрос:
User.query.filter_by(hometown='New York').filter_by(university='USC').all()
Теперь я хотел бы динамически генерировать эти запросы на основе значения переменной.
Например, моя переменная может выглядеть так:
{'hometown': 'New York'}
Или вот так:
{'university': 'USC'}
... Или даже так:
[{'hometown': 'New York'}, {'university': 'USC'}]
Можете ли вы помочь мне написать функцию, которая принимает словарь (или список словарей) в качестве ввода, а затем динамически строит правильный запрос sqlalchemy?
Если я пытаюсь использовать переменную для ключевого слова, я получаю это err:
key = 'university'
User.query.filter_by(key='USC').all()
InvalidRequestError: Entity '<class 'User'>' has no property 'key'
Во-вторых, я не уверен, как динамически связывать несколько выражений filter_by.
Я могу явным образом вызывать выражение filter_by, но как я могу связать несколько элементов на основе переменной?
Надеюсь, это имеет больше смысла.
Спасибо!