2012-02-16 2 views
0

私のコードのいくつかの異なる場所でdb.Key.from_path(Model、key_name)を使用していて、db.get()またはModel.get_by_key_name() 。私は、これらの後者のコマンドが何かを戻すべきであることを確かに知っていても、常に0のアイテムを返すことに気づいた。厳密な検査の結果、db.Key.from_path()コマンドが正しいキーを返さなかったことに気付きました。返されるキーは、特に冒頭では非常によく似ていますが、文字の一部が異なり、データストアビューアに表示されるキーよりも約75%短くなっています。他に誰かがこれに遭遇しましたか?ありがとう。ここでdb.Key.from_path()が正しいキーを返さない

は、いくつかのサンプルコードです:

class Root(db.Model): 
    pass 

class Parent(db.Model): 
    pass 

class MyModel(db.Model): 
    pass 

root = Root().put() 
parent = Parent(key_name=parentname,parent=root).put() 
mymodel = MyModel(key_name=mymodelname,parent=parent).put() 

mymodel_k = db.Key.from_path('Parent','parentname','MyModel','mymodelname') 
mymodel = db.get(mymodel_k) 

mymodelというあなたは、すべての祖先とパスを正しく構築されていませんなし

+1

Key.from_path「は一つ以上の祖先パスから新しいKeyオブジェクトを構築しますエンティティのキ​​ー "、これはあなたがやろうとしていることですか?関連性の高いコードを投稿すると、良い答えを得るにはかなり時間がかかります。 – Sologoub

+0

@Sologoub:Key.from_pathは、同じパラメタを提供する場合、同じキーを返します。 – aschmid00

+0

あなたのコメントをありがとう、私はいくつかのサンプルコードが含まれています。 – mkc

答えて

2

ではありません。

root = Root().put() 
parent = Parent(key_name=parentname, parent=root).put() 
mymodel = MyModel(key_name=mymodelname, parent=parent).put() 

ルートは - >は親を持たず
親 - >親ルート
を持って に、mymodel - >親の親に

db.Key.from_path('Parent','parentname','MyModel','mymodelname')
この1つは親キーに含まれているルート祖先をミスしています。

右キーは、次のようになります

db.Key.from_path('MyModel', 'mymodelname', parent=parent) 

と、彼らはあなたが短いキーの作成理由です! 1つの祖先が見つからない。

+0

ありがとう、@ aschmid00。だから私は独自のメソッドでこれを呼び出す場合は、db.Key.from_path()で使用するために親を取得するクエリをまず実行する必要がありますか? – mkc

+1

あなたの場合の問題は、あなたがそれがシステムによって自動割り当てされるので、あなたが知らないし、ルートキーを構築できないということです。つまり、ルートエンティティが本当に必要な場合は、そのキーに定義するキーを指定して、クエリを必要としないようにすることもできます。そうであれば、親エンティティに問い合わせる必要があります。 – aschmid00

+0

ありがとう、@ aschmid00、これは非常に役立っています。 – mkc

1

2つの先祖レベルがあるように見えますので、あなたは、この使用する必要があります。

Key.from_path('Root', root.key().id(), 'Parent','parentname','MyModel','mymodelname') 

または

Key.from_path('Parent','parentname','MyModel','mymodelname', parent=root) 
+0

ありがとう、@Guido van Rossum! – mkc

+0

これはascmid00からの同じ答えではありませんか? – marcorossi

関連する問題