最近、GAEのNDBをいじっていて、わからないことが次々に出てくるんだけど、ネットでいろいろ調べていると、stackoverflowって海外のサイトと、公式のドキュメント、この2つが圧倒的に役に立つ。たまに英語のニュアンスがわからないくて、日本語のみで検索することがあるけど、情報量が違いすぎて、英語ネイティブとの差は大きいなと感じる。
で、特定のデータを消す方法だけど、NDBでは消したいデータのキーを取り出してから消去する、らしくて
X.key.delete()
みたいに書くらしい。
特定の条件に当てはまるデータを消したい場合は、delete_multiを使うといいらしくて
q1 = A.query()
q2 = q1.filter( >=を使ったフィルター ) # Filter
q3 = q2.filter( <=を使ったフィルター ) # Filter
ndb.delete_multi(q3.fetch(keys_only=True))
みたいにしたら簡単に消したいデータだけ消すことができた。
keys_only=True
というのは、fetchのオプションで、keys_only=Trueとすると、データ(エンティティ)を返すんではなくて、キーのみを返すらしい。
削除に必要なのはキーだけなので、あとは簡単にndb.delete_multiで一発で消去できる。