为什么App Engine命名空间在我不期望它时应用?

时间:2012-08-31 01:49:06

标签: python google-app-engine

我对名称空间在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()

1 个答案:

答案 0 :(得分:3)

命名空间是密钥的一部分。

只有在未明确指定另一个命名空间时,才会考虑使用命名空间管理器定义的命名空间,例如:在创建新实体时。换句话说,当生成新密钥时,您使用namespace_manager.set_namespace设置的名称空间将注入密钥。从那时起,密钥包含关于" location"的完整信息。实体(甚至是app id),它足以检索它。

阅读https://developers.google.com/appengine/docs/python/datastore/keyclass#Key_namespace