1

在 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错误。我怀疑这与我尝试做的追加有关,尽管我不完全确定。

这些事件也有一个 datetime 属性......我如何按时间对结果事件列表进行降序排序?虽然我可以ORDER BY time DESC在上面的两个查询中使用,但不一定保证它们的合并是排序的。

我还应该提到 Event 表的 firstPlayer 和 secondPlayer 属性是互斥的(没有事件将 firstPlayer 和 secondPlayer 设置为同一个玩家)。

谢谢!

4

1 回答 1

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 数据存储区进行了尝试,它确实有效。

恐怕为了得到你想要的排序,你必须使用sorted builtin对它们进行排序:

sorted_events = sorted(events, key=lambda event: event.time)
于 2012-07-24T19:35:11.740 回答