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

时间:2019-04-26 17:49:03

标签: python 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])

但这导致:

  

AttributeError:“统计信息”对象没有属性“ getattr”

正确的方法是什么?

1 个答案:

答案 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)