Amazon Neptune при отправке запроса: AttributeError: объект «str» не имеет атрибута «source_instructions»
У меня есть следующий код, работающий на AWS lambda, но получающий следующую ошибку.
Ошибка
[ERROR] AttributeError: 'str' object has no attribute 'source_instructions'
Traceback (most recent call last):
File "/var/task/gremlin_python/driver/driver_remote_connection.py", line 56, in submit
result_set = self._client.submit(bytecode, request_options=self._extract_request_options(bytecode))
File "/var/task/gremlin_python/driver/driver_remote_connection.py", line 81, in _extract_request_options
options_strategy = next((x for x in bytecode.source_instructionsEND RequestId: 4ee8073c-e941-43b3-8014-8717893b3188
Исходный код
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
def test_neptune(host):
remoteConn = DriverRemoteConnection('wss://{}:8182/gremlin','g'.format(host))
query = "g.V().groupCount().by(label).unfold().project('label','count').by(keys).by(values)"
response = remoteConn.submit(query)
print("response-> {}" .format(response))
# iterate repsonse
# go thru label
for set_item in response:
for item in set_item:
print("item-> item: {}".format(item))
remoteConn.close()
test_neptune()
2 ответа
Ваш
DriverRemoteConnection
звонок неверный. У вас есть:
remoteConn = DriverRemoteConnection('wss://{}:8182/gremlin','g'.format(host))
Итак, вы отправляете
{}
в качестве имени хоста и передать «g» в качестве второго параметра, что, вероятно, и является причиной ошибки. Я не знаю, для чего вы предназначали «g», но вы, вероятно, хотите:
remoteConn = DriverRemoteConnection('wss://{}:8182/gremlin'.format(host))
Если вы отправляете запрос в виде текстовой строки, вам необходимо создать
Client
объект по-другому или напишите запрос как встроенный Python. Есть два примера в (1) и (2), которые показывают каждый вариант. Ошибка, которую вы видите, связана с тем, что сервер пытается найти байт-код Gremlin в отправленном пакете, но нашел только строку (которая не имеет
source_instructions
метод).
Используя
DriverRemoteConnection
вы можете использовать строку кода Python, например:
result = (g.V().groupCount().
by(label).
unfold().
project('label','count').
by(keys).
by(values).
next())
Если вы действительно хотите/нужно отправить запрос в виде строки вместо байт-кода, см. мой ответ на этот вопрос