从SQLAlchemy KeyedTuple中获取特定字段的更好方法

2 投票
1 回答
1076 浏览
提问于 2025-04-17 22:18

我有一个叫做 SQLAlchemy KeyedTuple 的东西,它里面有好几个字段。我想要得到一个元组(或者,如果可以的话,得到一个 KeyedTuple),里面包含所有字段,除了我知道名字的两个字段。

现在我有以下代码,用来从 "row" KeyedTuple 生成一个“元组”列表(通过中间的 "dictRow" 字典,以及 KeyedTuple 的 _asdict 函数),并排除 "month" 和 "year" 这两个字段:

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 个回答

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"))

那你干脆在原始查询中把那些列排除掉不就行了吗?

撰写回答