функции драйвера neo4j эквивалентны функциям py2neo

#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 . Курсор