没有当前上下文。 NDB 调用必须在 google.cloud.ndb.Client.context 建立的上下文中进行

问题描述 投票:0回答:1

我有一个适用于 python2.7 的 appengine 应用程序,我想迁移到 python3.9。我首先在我的 appengine 应用程序中调用 google ndb cloud。我使用 python3.9 和 django 作为网络框架。 这是我的代码:

from django.shortcuts import render,redirect
from google.cloud import  ndb


class Book(ndb.Model):
    title = ndb.StringProperty()

client = ndb.Client()


def get_books():
    with client.context():
        books = Book.query()
        return books

def main(request):
    return HttpResponse(get_books())

这是回溯


File "/Users/hizan/Desktop/venvdjango/lib/python3.9/site-packages/google/cloud/ndb/query.py" in wrapper
  1213.         context = context_module.get_context()

File "/Users/hizan/Desktop/venvdjango/lib/python3.9/site-packages/google/cloud/ndb/context.py" in get_context
  118.         raise exceptions.ContextError()

Exception Type: ContextError at /
Exception Value: No current context. NDB calls must be made in context established by google.cloud.ndb.Client.context.


   
python django google-app-engine migration google-cloud-datastore
1个回答
0
投票

您应该创建一个中间件,以便自动处理上下文,而不是在使用 NDB 的每个函数/方法中定义上下文。

参见 Google for Django 的示例

© www.soinside.com 2019 - 2024. All rights reserved.