Ключевой элемент пути должен быть завершен - PullRequest
0 голосов
/ 10 апреля 2019

Я работаю с некоторой документацией по API облачного хранилища данных Google

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 в качестве ступеньки, но расширится до создания одного для каждого видео. Любые мысли о том, что вызывает вышеуказанную ошибку, будут оценены.

1 Ответ

1 голос
/ 11 апреля 2019

Я считаю, что entity['collection_key'] = key является виновником (key - это datastore_client.key('VideosToCollections'), у которого нет идентификатора, следовательно, путь является неполным). Возможно, вы хотели установить его на ключ v. Итак entity['collection_key'] = v.key

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...