#python #graph-databases #py2neo #rasa #neo4j-driver
#питон #графические базы данных #py2neo #rasa #neo4j-драйвер
Вопрос:
def get_nlg(graph_query):
driver = Graph("neo4j://localhost:7687", auth=("neo4j","password"))
graph_response = graph.evaluate(graph_query)
Для приведенного выше кода я заменил код драйвера, как показано ниже, но он не работает, какая функция в драйвере neo4j эквивалентна функции evaluate() в py2neo?
def get_nlg(graph_query):
driver = GraphDatabase.driver("neo4j://localhost:7687", auth=("neo4j","password"))
with driver.session() as session:
graph_response = session.run(graph_query)
return graph_response
Когда результат из graph_response 2-го кода передается в приведенный ниже код, я получаю сообщение об ошибке
Ошибка типа:Результирующий объект в 0x7f94cf7f31d0> не является сериализуемым в формате JSON
class GetBiggestComponent(Action):
def name(self):
return "action_get_biggest_component"
def run(self, dispatcher, tracker, domain):
query = None
intent = tracker.latest_message['intent']
child_comp = tracker.get_slot('component_type_child')
parent_comp = tracker.get_slot('component_type_parent')
error = None
graph_response = GenerateQuery.get_biggest_component(child_comp, parent_comp)
graph_response['intent_name'] = intent['name']
dispatcher.utter_custom_message(graph_response)
return []
ошибка возникает, когда она передается в строке
dispatcher.utter_custom_message(graph_response)
Ответ №1:
Прямого эквивалента нет. Вам нужно run
будет выполнить запрос, а затем выбрать первое значение из первой возвращенной записи. Это все, что evaluate
делается за кулисами.
Комментарии:
1. не могли бы вы рассказать мне, как получить первое значение из первой записи при использовании функции
run
?2. может быть, немного поздно, но если вы выполните «run», вы получите обратно объект cursor. Вы можете обрабатывать объект cursor, используя что-то вроде
while cursor.forward(): result = cursor.current.data()
приведенной здесь документации: https://py2neo.org/2021.1/cypher/index.html#py2neo.cypher . Курсор