0

名前空間が App Engine (python) で機能する方法に完全に混乱しています。https://developers.google.com/appengine/docs/python/multitenancy/multitenancy#Using_Namespaces_with_the_Datastoreを読み、その提案に従いましたが、なぜこのコードが機能するのでしょうか? 「get」で「現在の」名前空間を使用するべきではありませんか?

namespace_manager.set_namespace("foo")
t = model.Track(description="in foo namespace")
t.put()

namespace_manager.set_namespace("bar")
# Why doesn't this line fail?
x = model.Track.get(t.key())
x.delete()
4

1 に答える 1

3

名前空間はキーの一部です。

名前空間マネージャーで定義した名前空間は、新しいエンティティを作成するときなど、別の名前空間を明示的に指定しない場合にのみ考慮されます。つまり、新しいキーが生成されると、namespace_manager.set_namespace で設定した名前空間がキーに挿入されます。それ以降、キーにはエンティティの「場所」に関する完全な情報 (アプリ ID も含む) が含まれており、それを取得するのに十分です。

https://developers.google.com/appengine/docs/python/datastore/keyclass#Key_namespaceで読む

于 2012-08-31T02:06:40.850 に答える