首页 > 解决方案 > 在 python 中加载 csv 文件时尝试使用 SET += 时出现 Neo4j 错误

问题描述

所以我正在使用 python 将 csv 文件加载到 Neo4j。我的加载代码如下所示:

from neo4j import GraphDatabase

driver = GraphDatabase.driver("connection", auth=("name", "password"))

def add_data(tx):
    tx.run("LOAD CSV WITH HEADERS FROM 'file:///C:/Users/Damian/PycharmProjects/NeoJ/DataMap.csv' AS Map \
    MERGE (source {node_name: Map.source}) \
    MERGE (destination {node_name: Map.destination}) \
    MERGE (source)-[:FEEDS_INTO]->(destination)")

def add_other(tx):
    tx.run("LOAD CSV WITH HEADERS FROM 'file:///C:/Users/Damian/PycharmProjects/NeoJ/Data.csv' AS Data \
        Match (n {node_name: Data.dane}) \
        MERGE (system {system_name: Data.system}) \
        MERGE (scope {scope_name: Data.scope}) \
        MERGE (process {process_name: Data.process}) \
        MERGE (owner {owner_name: Data.owner}) \
        MERGE (n)-[:UNDER_SYSTEM]->(system) \
        MERGE (system)-[:UNDER_SCOPE]->(scope) \
        MERGE (n)-[:HAS_PROCESS]->(process) \
        MERGE (owner)-[:IS_OWNER_OF]->(n) ")

def add_data_properties(tx):
    tx.run("LOAD CSV WITH HEADERS FROM 'file:///C:/Users/Damian/PycharmProjects/NeoJ/Data.csv' AS Data \
    MATCH (n {node_name: Data.dane }) \
    SET n.system += Data.system \
    SET n.scope += Data.scope \
    SET n.process += Data.process \
    SET n.owner += Data.owner")

with driver.session() as session:
    session.write_transaction(add_data)
    session.write_transaction(add_other)
    session.write_transaction(add_data_properties)
driver.close()

我得到的错误是:

neo4j.exceptions.CypherSyntaxError: {code: Neo.ClientError.Statement.SyntaxError} {message: Invalid input '+': expected whitespace, comment, '(', '.' or '=' (line 1, column 147 (offset: 146))
"LOAD CSV WITH HEADERS FROM 'file:///C:/Users/Damian/PycharmProjects/NeoJ/Data.csv' AS Data     MATCH (n {node_name: Data.dane })     SET n.system += Data.system     SET n.scope += Data.scope     SET n.process += Data.process     SET n.owner += Data.owner"                                                                                                                                              ^}

但是当我使用例如 SET n.system = Data.system 时,一切正常。有人知道如何解决这个问题吗?任何帮助将不胜感激。

标签: neo4jcypher

解决方案


您似乎已经发现并纠正了错误。如果你想system在节点上设置属性,n那么你想做

SET n.system = Data.system

如果你想n用包含的地图更新节点,Data.system那么你想做

SET n += Data.system

推荐阅读