【发布时间】:2016-08-20 01:23:13
【问题描述】:
我正在尝试在此 URL 上找到的 adams.py 示例 https://cloud.google.com/datastore/docs/getstarted/start_python/
正如这个网址中所解释的那样:
如果您在 Google Compute Engine 上运行此代码,则不必创建新的服务帐户凭据,因为在创建具有数据存储和 userinfo-email 范围的实例时会使用项目的默认服务帐户。
在创建我的实例时,我检查了选项:
允许 API 访问同一项目中的所有 Google Cloud 服务。
当我跑步时
python adams.py 我的实例
我明白了:
ERROR:root:Error while doing datastore operation
ERROR:root:RPCError: beginTransaction Invalid Credentials
ERROR:root:HTTPError: 401 Unauthorized
事实上,即使我为实例使用了错误的名称,我也会收到相同的消息。
我的问题似乎与一年前的这个帖子相似:Connect google datastore from existing google compute engine in python
在我自己的代码中,它可以正常访问 BigQuery,然后当涉及到 Datastore 时,它会引发相同的错误,但至少更具体地解决了最后一行:resp = datastore.commit(req) .下面是使用Datastore的部分代码。
req = datastore.CommitRequest()
req.mode = datastore.CommitRequest.NON_TRANSACTIONAL
dsDashboard = req.mutation.insert_auto_id.add()
path_element = dsDashboard.key.path_element.add()
path_element.kind = 'Dashboard'
fmt = '%Y-%m-%d'
dashboardDate = dsDashboard.property.add()
dashboardDate.name = 'Date'
dashboardDate.value.string_value = dtDay.strftime(fmt)
dashboardValue = dsDashboard.property.add()
dashboardValue.name = 'Value'
dashboardValue.value.indexed = False
dashboardValue.value.string_value = encode(jDashboard)
resp = datastore.commit(req)
我的代码的错误:
Traceback (most recent call last):
File "code.py", line 262, in <module>
main()
File "code.py", line 256, in main
resp = datastore.commit(req)
File "/usr/local/lib/python2.7/dist-packages/googledatastore/__init__.py", line 90, in commit
return get_default_connection().commit(request)
File "/usr/local/lib/python2.7/dist-packages/googledatastore/connection.py", line 135, in commit
datastore_v1_pb2.CommitResponse)
File "/usr/local/lib/python2.7/dist-packages/googledatastore/connection.py", line 195, in _call_method
raise RPCError(method, response, content)
googledatastore.connection.RPCError: commit RPC client failure with HTTP(401) Unauthorized: Invalid Credentials
简而言之,这似乎很简单。这里有人遇到过同样的问题并找到了解决方法吗?
【问题讨论】:
-
你检查过提供的答案吗?
-
嗨。谢谢!在您回答之前,我不得不使用一种解决方法。我对你的解决方案很好奇,但我没有时间测试。还是谢谢!
标签: python google-compute-engine google-cloud-datastore protocol-buffers