【发布时间】:2013-10-30 15:05:43
【问题描述】:
假设我有一个这样的模型:
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()
要获得去南加州大学的用户列表,这是我的查询:
User.query.filter_by(university='USC').all()
要获取来自纽约的用户列表,以及前往南加州大学的用户,这是我的查询:
User.query.filter_by(hometown='New York').filter_by(university='USC').all()
现在,我想根据变量的值动态生成这些查询。
例如,我的变量可能如下所示:
{'hometown': 'New York'}
或者像这样:
{'university': 'USC'}
... 甚至像这样:
[{'hometown': 'New York'}, {'university': 'USC'}]
您能帮我编写一个函数,该函数将字典(或字典列表)作为输入,然后动态构建正确的 sqlalchemy 查询吗?
如果我尝试为关键字使用变量,我会得到这个错误:
key = 'university'
User.query.filter_by(key='USC').all()
InvalidRequestError: Entity '<class 'User'>' has no property 'key'
其次,我不确定如何将多个 filter_by 表达式动态链接在一起。
我可以显式调用 filter_by 表达式,但是如何根据变量将多个表达式链接在一起?
希望这更有意义。
谢谢!
【问题讨论】:
-
是的,我们可以帮助您构建该功能。当您尝试自己构建它时遇到了什么问题?
-
尝试将变量(例如:kv = 'hometown')分配为关键字 arg 时,出现此错误:nvalidRequestError: Entity '
' has no property 'kv' -
您能否将该代码显示为问题的一部分?实际上,您的问题似乎显示了您所知道的,而不是要求您解释您试图回答的内容。
-
知道了...现在添加更多。感谢您的帮助。
-
我相信您可以将单个字典(不是字典列表)直接传递给
filter_by。所以dict = {'hometown': 'New York', 'university': 'USC'}和User.query.filter_by(dict).all()。但是,我对此并不积极。
标签: python sql sqlalchemy flask flask-sqlalchemy