Как мне прочитать узел из neo4j с помощью py2neo

Я нуб python + neo4j. Попытка получить доступ к моим данным на graphenedb с помощью py2neo в моем веб-приложении python flask.

Я потратил часы, пытаясь сделать что-то простое. Все, что я хочу сделать, это получить узел из базы данных на основе его свойства.

Пробовал следующее, но он возвращает пустой массив клиенту:

    niagara = neo4j.GraphDatabaseService(<my graphenedb url>)

    people = niagara.get_or_create_index(neo4j.Node, "People")
    results = people.get("alias","BigDog")

    return json.dumps(results)

Единственный раз, когда мне удалось вернуть узел целиком, это когда я обращаюсь к нему по его идентификатору:

    return json.dumps(niagara.get_properties(niagara.node(0)))

Любая помощь будет впечатляющей.


person ParleParle    schedule 12.08.2014    source источник


Ответы (3)


попробуйте NodeSelector

from py2neo import NodeSelector,Graph,Node
graph = Graph('http://127.0.0.1:7474/db/data')
selector = NodeSelector(graph)
user_node = selector.select("Label",property_key=value).first()

это извлекает первый узел; nodeselector возвращает итератор, вы также можете привести его к списку

person aradhyamathur    schedule 20.07.2016

Насколько я вижу, вы просто создаете индекс, но никогда не добавляете в него свой узел? Кроме того, вы можете сделать это прозрачно в neo4j 2.0 с помощью Cypher, см. http://docs.neo4j.org/chunked/stable/query-schema-index.html

через конечную точку Cypher REST, которая, как я полагаю, также доступна через привязки Python, http://docs.neo4j.org/chunked/milestone/rest-api-cypher.html

person Peter Neubauer    schedule 12.08.2014

Возврат пустого массива в этом случае является правильным поведением. Вы создали индекс, а затем, как говорит Питер, ничего не добавили в него перед выполнением метода get. Каждая точка входа в индекс может содержать ноль или более узлов, и, поскольку ничего не было добавлено, это возвращает пустую коллекцию.

Вместо этого используйте метод get_or_create, чтобы создать узел, если его еще нет. существует - это также должно возвращать только один узел.

person Nigel Small    schedule 12.08.2014
comment
Спасибо за ответ. Я все еще ломаю голову над индексами. Я действительно просто хочу прочитать узел из базы данных, которую я создал ранее через консоль neo4j. - person ParleParle; 13.08.2014