【问题标题】:NDB MyModel.get_by_id() cannot find entity by key_nameNDB MyModel.get_by_id() 无法通过 key_name 找到实体
【发布时间】:2013-09-10 14:50:37
【问题描述】:

我正在实施 OAuth2 身份验证过程。

我使用一个名为 Client 的模型。第一步,调用 API 获取请求令牌,创建客户端实体并将令牌和密钥临时存储在客户端实体中。第二步,在用户授权应用并重定向到回调页面后...我需要获取相同的客户端实体并更新新检索到的访问令牌和密码。

在我的第一步中,我有这个:

key_name = 'service.%s' % (self.user.key.urlsafe(),)
client = Client.get_or_insert(
            key_name,
            parent=self.user.key,
            name='flickr',
            token=request_token['oauth_token'],
        )

在我的第二步中,我试图通过 key_name 获取客户端:

key_name = 'service.%s' % (self.user.key.urlsafe(),)
client = Client.get_by_id(key_name)

不幸的是,我无法在第二步中获取客户端...我尝试在第 1 步中打印出 string_id 并在第 2 步中检查 key_name,它们是相同的!但是我仍然没有...我正在关注cheat sheet方法,如果我使用了错误的方法,请纠正我...

附:我实际上正在连接到 Flickr,如果您有更好的 OAuth2 方法,请随时提出建议!非常感谢!

【问题讨论】:

    标签: google-app-engine python-2.7 app-engine-ndb


    【解决方案1】:

    你也需要传递父级

    client = Client.get_by_id(key_name, parent=self.user.key)
    

    编辑原因:

    由于您将父级插入插入意味着 get_by_id() 仅查找顶层,您需要在正确的组中查找它。您也可以通过以下方式获取它:

    client = ndb.Key(YourUserModel, userId, Client, key_name).get()
    

    【讨论】:

    • 费萨尔,非常感谢!并感谢您强调背后的原因!它拯救了我的一天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多