0

我对命名空间在 App Engine (python) 中的工作方式感到非常困惑。我已阅读https://developers.google.com/appengine/docs/python/multitenancy/multitenancy#Using_Namespaces_with_the_Datastore并遵循了它的建议,但为什么这段代码有效?它不应该在“get”中使用“current”命名空间吗?

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 回答