关键路径元素必须完整

时间:2019-04-10 19:56:30

标签: python google-cloud-platform google-cloud-datastore

我正在阅读有关Google Cloud Datastore API的一些文档

from google.cloud import datastore
datastore_client = datastore.Client(project="PROJECTNAME")
query = datastore_client.query(kind='Video')

r = query.fetch()
for v in r:
  key = datastore_client.key('VideosToCollections')
  entity = datastore.Entity(key=key)

  entity['collection_key'] = key
  datastore_client.put(entity)
  quit()

但是我在更新条目时收到此错误

Traceback (most recent call last):
File "fillvideocollections.py", line 20, in <module> datastore_client.put(entity)
File "/usr/local/lib/python2.7/dist-packages/google/cloud/datastore/client.py", line 421, in put
self.put_multi(entities=[entity])
File "/usr/local/lib/python2.7/dist-packages/google/cloud/datastore/client.py", line 448, in put_multi
current.commit()
File "/usr/local/lib/python2.7/dist-packages/google/cloud/datastore/batch.py", line 274, in commit
self._commit()
File "/usr/local/lib/python2.7/dist-packages/google/cloud/datastore/batch.py", line 250, in _commit
self.project, mode, self._mutations, transaction=self._id
File "/usr/local/lib/python2.7/dist-packages/google/cloud/datastore_v1/gapic/datastore_client.py", line 501, in commit
request, retry=retry, timeout=timeout, metadata=metadata
File "/usr/local/lib/python2.7/dist-packages/google/api_core/gapic_v1/method.py", line 143, in __call__
return wrapped_func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/google/api_core/retry.py", line 270, in retry_wrapped_func
on_error=on_error,
File "/usr/local/lib/python2.7/dist-packages/google/api_core/retry.py", line 179, in retry_target
return target()
File "/usr/local/lib/python2.7/dist-packages/google/api_core/timeout.py", line 214, in func_with_timeout
return func(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/google/api_core/grpc_helpers.py", line 59, in error_remapped_callable
six.raise_from(exceptions.from_grpc_error(exc), exc)
File "/home/jeffbrubaker/.local/lib/python2.7/site-packages/six.py", line 737, in raise_from
raise value
google.api_core.exceptions.InvalidArgument: 400 Key path element must not be incomplete: [VideosToCollections: ]

我希望上面的代码创建一个VideosToCollections对象作为垫脚石,但将扩展为每个Video创建一个。关于导致上述错误的原因的任何想法,将不胜感激。

1 个答案:

答案 0 :(得分:1)

我相信entity['collection_key'] = key是元凶(keydatastore_client.key('VideosToCollections'),它没有ID,因此路径不完整)。也许您打算将其设置为v的键。所以entity['collection_key'] = v.key

相关问题