【问题标题】:(Neo4j-driver) - How to do batch insert relationship with Python(Neo4j-driver) - 如何用Python做批量插入关系
【发布时间】:2019-08-08 08:04:22
【问题描述】:

我正在尝试在 neo4j 数据库中的节点之间批量创建关系。 我正在尝试使用此代码,但它不起作用!

relations = [{'from': 'man', 'to': 'woman', 'properties': {'cost': 0}},
{'from': 'woman', 'to': 'baby', 'properties': {'cost': 0}]

query = """
    UNWIND {{relations}} as row
    MATCH (from:SINGLE_NODE {{row.from}})
    MATCH (to:SINGLE_NODE {{row.to}})
    CREATE/MERGE (from)-[rel:IS_CONNECTED]->(to)
    (ON CREATE) SET rel += row.properties
    """.format(relations=relations)

session.run(query, relations=relations)

那么无论如何我可以使用批处理来添加关系吗?

【问题讨论】:

  • 你能分享一下你遇到的错误吗?
  • 感谢您的回复,它什么都没有显示,只是无法创建关系。

标签: python neo4j cypher neo4j-driver


【解决方案1】:

您的查询存在多个语法问题。

在下一行中,没有提及您尝试与参数 row.from 和 row.to 匹配的节点属性。

MATCH (from:SINGLE_NODE {{row.from}})
MATCH (to:SINGLE_NODE {{row.to}})

从它们的值来看,我猜这些应该是性别属性,查询应该类似于:

MATCH (from:SINGLE_NODE {{gender:row.from}})
MATCH (to:SINGLE_NODE {{gender:row.to}})

在以下语句中,它应该是 CREATE 或 MERGE,并且在第二行,ON CREATE 周围没有大括号。仅当您在第一行使用 MERGE 时才使用 ON CREATE,否则只需使用 SET。

CREATE/MERGE (from)-[rel:IS_CONNECTED]->(to)
(ON CREATE) SET rel += row.properties

所以它应该是以下之一:

CREATE (from)-[rel:IS_CONNECTED]->(to)
SET rel += row.properties

MERGE (from)-[rel:IS_CONNECTED]->(to)
ON CREATE SET rel += row.properties

【讨论】:

  • 我试过了,但出现这样的错误""".format(relations=relations) KeyError: 'name' Failed to write data to connection Address(host='localhost', port=7687) (Address(host='127.0.0.1', port=7687)); ("0; 'Underlying socket connection gone (_ssl.c:2263)'")
  • 这是我尝试过的代码query = """ UNWIND {{relations}} as row MATCH (from:SINGLE_NODE {name:{row.from}}) MATCH (to:SINGLE_NODE {name:{row.to}}) MERGE (from)-[rel:IS_CONNECTED]->(to) ON CREATE SET rel += row.properties """.format(relations=relations) session.run(query, relations=relations)
  • 哦,我的错。更新
【解决方案2】:

我现在找到了答案,所以正确的语法是这样的。

 query = """
    UNWIND {{relations}} as row
    MATCH (from:SINGLE_NODE {{name:row.from}})
    MATCH (to:SINGLE_NODE {{name:row.to}})
    MERGE (from)-[rel:IS_CONNECTED]->(to)
    ON CREATE SET rel += row.properties
    """.format(relations=relations)

    session.run(query, relations=relations)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多