私はドキュメント、ドキュメント、SO の質問と回答に目を通しましたが、これの小さな部分を理解するのにまだ苦労しています。どちらをいつ選ぶべきですか?
これは私がこれまでに読んだものです(単なるサンプル):
キークラスは私にはかなり簡単に思えます。ndb エンティティを作成すると、データストアは通常、id が作成される key(Kind, id) の形式でキーを自動的に作成します。
たとえば、次の 2 つのモデルがあるとします。
class Blah(ndb.Model):
last_name = ndb.StringProperty()
class Blah2(ndb.Model):
first_name = ndb.StringProperty()
blahkey = ndb.KeyProperty()
したがって、キーの種類を使用するだけで、Blah1 を親にしたい (または同じ姓を持つ複数の家族を持ちたい)
lname = Blah(last_name = "Bonaparte")
l_key = lname.put() **OR**
l_key = lname.key.id() # spits out some long id
fname_key = l_key **OR**
fname_key = ndb.Key('Blah', lname.last_name) # which is more readable..
それから:
lname = Blah2( parent=fname_key, first_name = "Napoleon")
lname.put()
lname2 = Blah2( parent=fname_key, first_name = "Lucien")
lname2.put()
ここまでは順調です(と思います)。次に、Blah2 の KeyProperty について説明します。Blah1 がまだ同じであると仮定します。
lname3 = Blah2( first_name = "Louis", blahkey = fname_key)
lname3.put()
これは正しいです ?
さまざまなことを照会する方法
クエリの姓:
Blah.query() # all last names
Blah.query(last_name='Bonaparte') # That specific entity.
ファーストネーム:
Blah2.query()
napol = Blah2.query(first_name = "Napoleon")
bonakey = napol.key.parent().get() # returns Bonaparte's key ??
bona = bonakey.get() # I think this might be redundant
これは私が迷子になるところです。key または keyproperty を使用して名から Bonaparte を検索する方法。ここには追加しませんでしたが、おそらく追加する必要があります。これは、キーが祖先/親を追跡しているため、親、祖父母、偉大な祖父母の議論です.
KeyProperty と固有のキー クラスを使用する方法と理由。また、3 つのセンサー s1、s2、s3 があるとします。各センサーには数千の読み取り値がありましたが、s1 の今日のすべての読み取り値をグラフ化できるように、s1 に関連付けられた読み取り値を保持したいと考えています。どちらを使用しますか? KeyProperty またはキー クラス ? これが他の場所で回答されている場合は申し訳ありませんが、どちらを選択するか、なぜ/どのように選択するかについての明確な例/ガイドがありませんでした。