从SQLAlchemy KeyedTuple获取某些字段的更好方法

时间:2014-03-14 13:41:46

标签: python sqlalchemy

我有一个SQLAlchemy KeyedTuple有几个字段。我希望得到一个元组(或者,如果可能的话,一个KeyedTuple),除了其中两个字段之外,还有其中的两个字段,我知道这个字段。

目前我有以下代码,通过排除“月”和“年”字段,从“行”KeyedTuple(使用中间“dictRow”dict,以及KeyedTuple的_asdict函数)生成“元组”列表:

values = []
dictRow = row._asdict()
for key in row.keys():
    if key not in ("year", "month"):
        print key, type(row), dictRow[key]
        values.append (dictRow[key])

为了防止它变得很重要,上下文会产生一个查询结果,我真的需要排除某些字段,并获得剩下的字段。

1 个答案:

答案 0 :(得分:1)

更好是非常主观的。但是如果你真的想要一个KeyedTuple并保留原始的价值顺序,那么下面应该有效:

values = KeyedTuple(*zip(*(
                    (row[i], k) for i, k in enumerate(row.keys())
                    if not k in ("year", "month")
                    )))

# or, just simple tuple:
values = tuple(row[i] for i, k in enumerate(row.keys())
               if not k in ("year", "month"))

为什么不直接从原始查询中排除这些列?