Ben*_*lah 7 sqlalchemy flask flask-sqlalchemy
我一直在试图弄清楚如何将request.args传递给sqlalchemy过滤器.
我认为这应该有效:
model.query.filter(**request.args).all()
Run Code Online (Sandbox Code Playgroud)
但它正在抛出错误:
TypeError: <lambda>() got an unexpected keyword argument 'userid'
Run Code Online (Sandbox Code Playgroud)
当存在userid或任何其他get arg时.
根据这篇文章 - /sf/ask/1365427381/ - 您可以将dict传递给过滤器函数.
我有什么想法我做错了吗?
非常感谢 :)
更新:非常感谢下面的海报,但现在它抛出以下错误:
ProgrammingError: (ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY tblclients.clientname' at line 3") 'SELECT favourites.id AS favourites_id, favourites.userid AS favourites_userid, favourites.clientid AS favourites_clientid, favourites.last_visit AS favourites_last_visit \nFROM favourites INNER JOIN tblclients ON tblclients.clientid = favourites.clientid \nWHERE favourites.userid = %s ORDER BY tblclients.clientname' ([u'41'],)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
首先,你必须使用filter_by,而不是filter.
其次,Flask request.args使用MultiDict,一个带有列表中值的dict,允许同一个键有多个值,因为同一个字段在查询字符串中可以出现多次.您收到错误,因为SQL查询只获得了[u'41']预期的时间'41'.你可以request.args.to_dict()用来解决这个问题:
model.query.filter_by(**request.args.to_dict()).all()
Run Code Online (Sandbox Code Playgroud)
使用filter_by:
model.query.filter_by(**request.args).all()
Run Code Online (Sandbox Code Playgroud)
filter像这样使用:query.filter(Class.property == value)whilefilter_by 像这样使用:(query.filter_by(property=value)第一个是表达式,后一个是关键字参数)。
| 归档时间: |
|
| 查看次数: |
8149 次 |
| 最近记录: |