在GAE(python)中合并两个GQLQueries时遇到一些问题。
fp_events = db.GqlQuery("SELECT * FROM Event WHERE firstPlayer=:1", alias).fetch(mylimit)
sp_events = db.GqlQuery("SELECT * FROM Event WHERE secondPlayer=:1", alias).fetch(mylimit)
events = fp_events.append(sp_events)
但是,当我尝试使用for循环for event in events:
迭代这些事件时,我在该行遇到TypeError: 'NoneType' object is not iterable
错误。我怀疑这与我试图做的追加有关,虽然我不完全确定。
这些事件也有一个日期时间属性...我怎样才能按时间对结果事件列表进行排序,降序?虽然我可以在上面的两个查询中使用ORDER BY time DESC
,但它们的合并并不一定能保证排序。
我还应该提到Event表的firstPlayer和secondPlayer属性是互斥的(没有事件将firstPlayer和secondPlayer都设置为同一个播放器)。
感谢 - 你!
答案 0 :(得分:2)
您可以使用list
将可迭代对象转换为Python列表:
fp_events = db.GqlQuery("SELECT * FROM Event WHERE firstPlayer = :1", alias).fetch(mylimit)
sp_events = db.GqlQuery("SELECT * FROM Event WHERE secondPlayer = :1", alias).fetch(mylimit)
要合并这两个列表,请尝试以下方法:
fp_events_list = list(fp_events)
sp_events_list = list(sp_events)
events = fp_events_list + sp_events_list
我刚刚在远程shell中尝试使用我自己的AppEngine数据存储区之一,它确实有效。
我担心为了获得您想要的排序,您必须使用the sorted builtin对它们进行排序:
sorted_events = sorted(events, key=lambda event: event.time)