(Neo4j-driver) - 如何批量插入关系 Python

(Neo4j-driver) - How to do batch insert relationship with Python

我正在尝试批量创建 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)

那么我怎样才能使用批处理添加关系呢?

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

在下一行中没有提到您试图与参数 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 OR 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

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

 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)