'No api proxy found for service "%s"' % service AssertionError: No api proxy found for service "datastore_v3"

'No api proxy found for service "%s"' % service AssertionError: No api proxy found for service "datastore_v3"

我正在使用 Google App EngineDatastore

这是我的模型class project_name/model/quiz_models.py

from google.appengine.ext import db


class Quiz(db.Model):
    quiz_id = db.StringProperty()
    post_id = db.StringProperty()
    creator_id = db.StringProperty()
    timestamp = db.DateTimeProperty()
    quiz_title = db.StringProperty()

main.py 文件

@app.route('/insert_db')
def run_quickstart():
    quiz = Quiz(post_id=data['post_id'],
                quiz_id='123',
                quiz_info='test info',
                creator_id=data['creator_id'],
                timestamp=datetime.datetime.now(),
                quiz_title='Test title')
    quiz.put()

我什么时候向 /insert_db 发出获取请求 URL 我收到此错误

File "/layers/google.python.pip/pip/lib/python3.9/site-packages/google/appengine/api/apiproxy_stub_map.py", line 69, in CreateRPC      
assert stub, 'No api proxy found for service "%s"' % service  AssertionError: No api proxy found for service "datastore_v3"

但是 google 提供的这个示例片段工作正常

@app.route('/insert_db')
def run_quickstart():
    # [START datastore_quickstart]
    # Imports the Google Cloud client library

    # Instantiates a client
    datastore_client = datastore.Client()

    # The kind for the new entity
    kind = "Tasker"
    # The name/ID for the new entity
    name = "sampletask1aa"
    # The Cloud Datastore key for the new entity
    task_key = datastore_client.key(kind, name)

    # Prepares the new entity
    task = datastore.Entity(key=task_key)
    task.update(
        {
            "category": "Personal",
            "done": False,
            "priority": 4,
            "description": "Cloud Datastore",
        }
    )

    # Saves the entity
    datastore_client.put(task)

有多种方法可以与 GAE 中的数据存储进行交互。选项太多,让人一头雾水,但我会尽力为您指明正确的方向。

您的代码使用的是非常古老的数据存储访问技术,如以下行所示:

from google.appengine.ext import db

这是带有 Python 2 的原始第一代 GAE。我怀疑它不能与 Python 3.

一起使用

从您的代码来看,您似乎想将第二代 GAE 与 Python 3 一起使用(这很好,因为旧的东西正在逐步淘汰)。您有两个主要的数据存储选项:

  1. 使用the google-cloud-datastore Python client。这就是上面的工作代码示例所使用的。
  2. 使用the google-cloud-ndb Python client。这更接近您代码中的旧 db 库。

如果你是开始一个新项目,那么第一选择更好。如果您正在迁移 Python 2 项目,那么第二个选择可能更好。