2017-04-25 3 views
0

Ich versuche, eine CSV mit Strings von AD-Gruppen in Neo4j zu analysieren. Ich benutze den Python-Treiber und folge dem schnellen Beispiel.Cypher Syntaxfehler mit neo4h Python-Treiber

import csv 
from neo4j.v1 import GraphDatabase 

driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "neo")) 

def print_friends(tx, name): 
    for record in tx.run("MATCH (a:User) WHERE a.name = $name " 
         "RETURN a.name ORDER BY a.name", name=name): 
     print(record["a.name"]) 

def create_group(tx, name): 
    print "create group: " + name 
    tx.run("MERGE (g:Group {name: $name}) ", {"name": name}) 

def set_group_label(tx, name, label): 
    label = ":" + label 
    print "set label: " + name +" "+ label 
    tx.run("MATCH (g:Group) " 
      "WHERE g.name = $name " 
      "SET g $label", name=name, label=label) 

with open('../transfer/ALLADUsersGroups_201704180501.csv', 'rb') as file: 
    reader = csv.reader(x.replace('\0', '') for x in file) 
    for i, row in enumerate(reader): 
     if i==102435: 
      with driver.session() as session: 
       session.write_transaction(create_group, row[1].split("=")[1]) 
       session.write_transaction(set_group_label, row[1].split("=")[1], row[1].split("=")[0]) 

Ich versuche, ein neues Label basierend auf dem Typ der Gruppe, z. {CN, OU, DC usw.}. jedoch die folgende Fehlermeldung erhalte ich:

neo4j.exceptions.CypherSyntaxError: Unexpected end of input: expected an identifier character, whitespace or a relationship pattern (line 1, column 50 (offset: 49)) 
"MATCH (g:Group) WHERE g.name = $name SET g $label" 
               ^

Bin ich etwas falsch ist dies etwas mit dem Fahrer zu tun?

sollte ich sagen, dass ich die Installationsanweisungen von hier befolgt haben: Neo4j Driver for Python

Antwort

0

Die Syntax für ein Label : wie so verwendet Einstellung: SET g:Thing. Ich glaube jedoch nicht, dass Cypher das Setzen dynamischer Labels erlaubt.

Sie müssen für diesen speziellen Fall wahrscheinlich eine String-Verkettung verwenden, indem Sie die Label-Zeichenfolge an der entsprechenden Stelle in der Abfrage anhängen oder APOC Procedures verwenden, um das Label dynamisch aus einer Zeichenfolge hinzuzufügen.