2017-02-07 3 views
0

Wenn ich meine Python-Skript über Neo4j Datenbank ausführen, funktioniert ok:Neo4j - py2neo - Parameter können nicht in relatinoship auf Schöpfung platzieren

 
from py2neo import Node, Relationship, Graph, cypher, authenticate 

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

# connect to authenticated graph database 
sgraph = Graph("http://localhost:7474/db/data/") 

    a=raw_input("Input Name A: ") 
    b=raw_input("Input Name B: ") 
    graph = Graph() 
    tx = graph.cypher.begin() 
    tx.append("MATCH (c:Person {name:{a}}), (d:Person {name:{b}}) CREATE (c)-[:KNOWS}]->(d)", a=a, b=b) 
    tx.commit() 

aber, als ich versuchte, Parameter Beziehung hinzufügen ...:

a=raw_input("Input Name A: ") 
b=raw_input("Input Name B: ") 
z=raw_input("Input parameter of relationship z: ") 
x=raw_input("Input parameter of relationship x: ") 
graph = Graph() 
tx = graph.cypher.begin() 
tx.append("MATCH (c:Person {name:{a}}), (d:Person {name:{b}}) CREATE (c)-[:KNOWS{labelz:{z},labelx:{x}}]->(d)", a=a, b=b) 
tx.commit() 

ich habe dies:

 
    tx.commit() 
File "/usr/local/lib/python2.7/dist-packages/py2neo/cypher/core.py", line 333, in commit 
    return self.post(self.__commit or self.__begin_commit) 
File "/usr/local/lib/python2.7/dist-packages/py2neo/cypher/core.py", line 288, in post raise self.error_class.hydrate(error) 

py2neo.cypher.error.statement.ParameterMissing: Expected a parameter named z 

Wie muss ich diese Variablen platzieren zu vermeiden, dass eine Fehlermeldung? Vielen Dank im Voraus.

+1

Sie haben die Parameter zur Verfügung gestellt für 'a' und 'b' am Ende der Abfrage, aber Sie habe nicht 'z' oder' x' angegeben, sondern einfach auf. – InverseFalcon

+0

Wir haben absolut recht, ich habe es vor ein paar Minuten getestet, aber ich habe es geschafft als Parameter das Label der Beziehung, „weiß“, in diesem Fall wird einschließlich am Ende der Abfrage nicht einmal arbeiten. –

+0

in diesem Fall könnte es eine gute Idee sein, die String-Verkettung zu verwenden, um dynamisch den Beziehungstyp in die hinzufügen Wenn Sie APOC-Prozeduren installieren, können Sie u se [apoc.create.relationship()] (https://neo4j-contrib.github.io/neo4j-apoc-procedures/#_creating_data), um die Beziehung zu erstellen, anstatt CREATE zu verwenden. Dadurch können Sie eine Zeichenfolge für den Beziehungstyp angeben. – InverseFalcon

Antwort

0

Parameter können nicht als für Eigenschaftsnamen verwendet werden, Beziehungstypen und Etiketten :( link,

Verwandte Themen