你如何加入sqlalchemy中的两个KeyedTuple对象?

时间:2014-06-30 14:38:46

标签: python sqlalchemy

我有以下两个查询

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 个答案:

答案 0 :(得分:1)

您可以通过以下两个查询结果立即构建新的KeyedTuple

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