从CSV加载数据至Neo4J出现CypherSyntaxError报错如何解决
问题解决方案
错误原因
报错核心有两点:
- 你将
LOAD CSV和后续节点、关系创建操作拆成了4次独立的tx.run调用,LOAD CSV生成的line变量仅在当前查询的上下文有效,后续三个查询完全无法识别该变量;同时单独执行LOAD CSV没有后续更新/RETURN子句,直接触发Neo4j语法校验报错。 - 你的CSV表头为
predecessor和successor,但代码中错误引用了不存在的line.source、line.destination字段,即便解决语法问题也无法读取到正确值。
修正后的完整代码
from neo4j import GraphDatabase driver = GraphDatabase.driver("bolt://localhost:7687", auth=("neo4j", "187179")) def add_data(tx): # 所有Cypher逻辑合并到同一个查询中,保证line变量上下文有效 tx.run(""" LOAD CSV WITH HEADERS FROM 'file:///data.csv' AS line MERGE (s:Table {id: line.predecessor}) MERGE (d:Table {id: line.successor}) MERGE (s)-[:FEEDS_INTO]->(d) """) with driver.session() as session: session.write_transaction(add_data) driver.close()
主要修改点
- 合并Cypher语句到同一个查询,解决
LOAD CSV的语法问题和line变量作用域问题 - 修正字段引用为CSV实际表头
predecessor、successor - 统一节点标签为
Table,避免同一个表作为上游/下游时生成重复的不同标签节点 - 使用
MERGE创建关系,避免多次运行代码重复生成相同关系
注意事项
请确保data.csv文件已经放置在Neo4j安装目录下的import文件夹中,否则会触发文件找不到的错误
内容的提问来源于stack exchange,提问作者neekitit
相关产品推荐
相关产品推荐

