2016-03-19 2 views
2

Итак, для пустой базы данных MERGE (N1:A {name:"A"})-[:r]->(N2:B {name:"B"}) создаст два узла N1 и N2 с краем r между ними. Следующий код python, однако, не сделать это ... но почему? Разве это не так?py2neo graph.merge() ведет себя иначе, чем Cypher MERGE?

from py2neo import Graph, authenticate, rel, Node 

graph = Graph() 

# set up authentication parameters 
authenticate("localhost:7474", <user>, <password>) 

# clear the data base 
graph.delete_all() 

graph.merge(rel(Node("A" , name="A"), "r", Node("B" , name="B"))) 

Выполнение этого скрипта приводит к созданию пустой базы данных. Почему это и как я могу получить поведение слияния Cypher из py2neo без использования graph.cypher.execute("MERGE ...")?

ответ

1

В Py2neo graph.merge соответствует или создает единый узел по метке и (необязательно) свойству, где вы хотите MERGE по всему шаблону (узел, отношение, другой узел).

Образец, который вы используете для оператора Cypher MERGE, не поддерживается в Py2neo вне Cypher.

0

Вот пример того, как объединить отношения двух узлов.

from py2neo import Graph, authenticate, Relationship, Node 

server = "localhost:7474" 

# set up authentication parameters 
authenticate(server, <user>, <password>) 

graph = Graph("{0}/db/data".format(server)) 

# merge nodes and relationship 
node1 = Node("A", name="A") 
node2 = Node("B", name="B") 
node1_vs_node2 = Relationship(node1, "r", node2) 
graph.merge(node1_vs_node2) 

Результат: Nodes A and B related after a merge

Смежные вопросы