2016-03-19 4 views
2

Also, für eine leere Datenbank MERGE (N1:A {name:"A"})-[:r]->(N2:B {name:"B"}) wird zwei Knoten N1 und N2 mit einer Kante r zwischen ihnen erstellen. Der folgende Python-Code tut jedoch nicht tun das ... aber warum? Sollte es nicht?py2neo graph.merge() verhält sich anders als 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"))) 

ausführen, die Skript führt zu einer noch leeren Datenbank. Warum ist das und wie kann ich das Cypher merge Verhalten von py2neo ohne graph.cypher.execute("MERGE ...") erhalten?

Antwort

1

In Py2neo graph.merge entspricht oder erstellt einen einzelnen Knoten nach Label und (optional) Eigenschaft, wo Sie auf das gesamte Muster (Knoten, Beziehung, anderen Knoten) MERGE werden möchten.

Das Muster, das Sie für die Cypher MERGE-Anweisung verwenden, scheint in Py2neo außerhalb von Cypher nicht unterstützt zu werden.

0

Hier ist ein Beispiel, wie eine Beziehung zweier Knoten zusammengeführt werden kann.

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) 

Das Ergebnis ist: Nodes A and B related after a merge