我表的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])
但这导致:
AttributeError:“统计信息”对象没有属性“ getattr”
正确的方法是什么?
答案 0 :(得分:1)
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
是一列,而不是字符串。无论如何,最好在这里使用runtime inspection API:
for name in inspect(Stats).columns.keys():
if name == 'u_state':
continue
rewards[name] = getattr(row, name)