You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将变量值作为参数名传入使用*kwargs的filter_by方法?

解决方法:用字典解包动态生成关键字参数

你遇到的问题本质是Python中如何用变量的值作为关键字参数的名称。直接写attr=xxx时,Python会把attr当作参数名本身,而不是它存储的字符串值(比如"username"),所以才会报错说User没有attr属性。

解决这个问题很简单,只需要先构建一个字典,把变量attr的值作为键,对应的属性值作为值,然后用**操作符把字典解包成关键字参数传给filter_by:

user = User(username="User", password="Password")
attr = "username"

# 构建字典并解包
session.execute(select(User).filter_by(**{attr: getattr(user, attr)})).scalar_one()

当你把attr改成"password"时,字典就会变成{"password": "Password"},解包后filter_by就会接收到password="Password"这个参数,完全符合你的需求。

如果需要同时传入多个动态参数,也可以扩展这个字典:

attrs = ["username", "password"]
filter_kwargs = {key: getattr(user, key) for key in attrs}
session.execute(select(User).filter_by(**filter_kwargs)).scalar_one()

内容的提问来源于stack exchange,提问作者Connor12858

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:04:53