1

GAE(python)での2つの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プロパティもあります...結果のイベントリストを時間の降順で並べ替えるにはどうすればよいですか?上記の2つのクエリで使用できますORDER BY time DESCが、それらのマージが必ずしもソートされるとは限りません。

また、イベントテーブルの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)

2つのリストを組み合わせるには、次のことを試してください。

fp_events_list = list(fp_events)
sp_events_list = list(sp_events)
events = fp_events_list + sp_events_list

自分のAppEngineデータストアの1つに対してリモートシェルで試してみましたが、間違いなく機能します。

必要な並べ替えを取得するには、並べ替えられた組み込みの並べ替えを使用する必要があります。

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