通过字符串访问/更新查询结果的字段[重复]
Posted
技术标签:
【中文标题】通过字符串访问/更新查询结果的字段[重复]【英文标题】:Access / update field of a query result by string [duplicate] 【发布时间】:2019-09-02 11:50:26 【问题描述】:我想访问和更新查询结果。
SQLAlchemy
通过使用 row.field
提供此功能。
但是,我想使用一个循环,其中包含我要更改为文本的字段名称。
当字段为“the_name_of_the_field”时,如何更新row.field
?
row = session.query(...).filter(...)
many_fields = "foo": "all_fields_updated", "bar": "all_fields_updated"
for field in many_fields
row.field = "all fields updated"
session.commit()
显然,行 row.field 会抛出错误,因为它尝试访问字段“field”而不是 dict 中声明的“foo”或“bar”。
AttributeError: 'result' 对象没有属性 'field'
我无法将查询结果转换为dict()
,因为session.commit()
不会再检测到它。
我在使用此命令时遇到了同样的问题:
table.update().\
where(...).\
values(field="all_fields_updated")
因为我不能将变量作为“字段”变量传递。我希望过度考虑这一点,但目前我似乎还没有找到解决这个问题的办法。任何解决方法/想法表示赞赏。
【问题讨论】:
【参考方案1】:您可以使用setattr
来设置基于字符串的属性。例如在你的情况下:
row = session.query(User).first()
many_fields = "foo": "all_fields_updated", "bar": "all_fields_updated"
for key, value in many_fields.items():
setattr(row, key, value)
session.commit()
【讨论】:
感谢您快速正确的回复。经过一番挖掘,我也找到了这个答案:***.com/questions/35805600/… 确保将 .iteritems 更新为 .items ,否则代码 sn-p 很棒。以上是关于通过字符串访问/更新查询结果的字段[重复]的主要内容,如果未能解决你的问题,请参考以下文章