获取 SQLAlchemy 中具有列名的列的最大子集



在我的表格的 21 个列中,我想在一行中最多获得 20

个列:
row = session.query(Stats).get(id)
rewards = {}
for c in Stats.__table__.columns:
    if c == 'u_state':
        continue
    rewards[c] = row.getattr(Stats, c)
return max(rewards, key=lambda key: rewards[key])

但这会导致:

属性

错误:"统计信息"对象没有属性"getattr">

正确的方法是什么?

getattr()是一个函数,而不是Stats实例上的方法。使用它从模型实例中获取特定的属性名称:

row = session.query(Stats).get(id)
rewards = {}
for c in Stats.__table__.columns:
    if c == 'u_state':
        continue
    rewards[c] = getattr(row, c)
return max(rewards, key=lambda key: rewards[key])

请注意,c是列,而不是字符串。无论如何,最好在这里使用运行时检查 API:

for name in inspect(Stats).columns.keys():
    if name == 'u_state':
        continue
    rewards[name] = getattr(row, name)

最新更新