如何在sqlalchemy中合并两个KeyedTuple对象?
我有以下两个查询
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
res
和 res_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())