通过字符串访问/更新查询结果的字段[重复]

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 很棒。

以上是关于通过字符串访问/更新查询结果的字段[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySql - 更新字符串部分的方法?

如何通过两种不同类型的字段对 linq 查询结果进行排序 [重复]

SQL查询结果替换???????

sql中对json数据字段的查询?

查询没有重复记录的访问表结果

访问:使用子查询中的计数更新查询 - 错误或所有结果