使用neo4h python驱动程序时出现Cypher语法错误

时间:2017-04-25 16:41:42

标签: python neo4j

我正在尝试将带有AD组字符串的CSV解析为Neo4j。我正在使用python驱动程序并按照快速示例。

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])

我正在尝试根据组的类型设置新标签,例如。 {CN,OU,DC等}。 但是我收到以下错误:

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"
                                                  ^

我做错了是不是司机出了问题?

我应该说我已经按照此处的安装说明进行操作:Neo4j Driver for Python

1 个答案:

答案 0 :(得分:0)

设置标签的语法使用:,如下所示:SET g:Thing。但是,我不相信Cypher允许设置这样的动态标签。

您可能需要对此特定情况使用字符串连接,将标签字符串附加到查询中的适当位置,或者使用APOC Procedures从字符串中动态添加标签。

相关问题