如何在sqlalchemy中合并两个KeyedTuple对象?

2 投票
1 回答
699 浏览
提问于 2025-04-18 11:35

我有以下两个查询

res=session.query(t_marketing_mailing_stats_tbl).filter(
    t_marketing_mailing_stats_tbl.c.mailing_id==mid)

res_t=session.query(t_marketing_time_stat_tbl).filter(
    t_marketing_time_stat_tbl.c.mailing_id==mid)

try:
    return res.one() + res_t.one()
except NoResultFound as e:
    return None

resres_t 都是 sqlalchemy.util._collections.KeyedTuple 类型的,它们可以相加,但相加后的结果只是一个简单的元组,没有键。

我想要一个合并的结果,所以我做了以下操作:

rv = {}
res=session.query(t_marketing_mailing_stats_tbl).filter(
    t_marketing_mailing_stats_tbl.c.mailing_id==mid)

res_t=session.query(t_marketing_time_stat_tbl).filter(
    t_marketing_time_stat_tbl.c.mailing_id==mid)

try:
    res =res.one()
    res_t = res_t.one()
    for k in res.keys():
        rv[k] = getattr(res, k)
    for k in res_t.keys():
        rv[k] = getattr(res_t, k)
except NoResultFound as e:
    return None

虽然这样可以实现,但我怀疑用 sqlalchemy 可能有更简单或者更好的方法来做到这一点。如果有的话,我很想知道怎么做。

1 个回答

1

你可以通过下面的方式,快速从两个查询结果构建新的 KeyedTuple

>>> from sqlalchemy.util import KeyedTuple
>>> res = KeyedTuple(a + b, a.keys() + b.keys())

撰写回答