Neo4j Python驱动程序:将节点作为参数传递给数据库

owfi6suc  于 2023-05-28  发布在  Python
关注(0)|答案(1)|浏览(158)

我想使用neo4j的python驱动程序在两个节点之间创建一个新的边。

def cypher_orchestration(tx, start_identifier: str, end_identifier:str, edge_type: str):
    start_node = node_match(tx, start_identifier).single()
    end_node = node_match(tx, end_identifier).single()
    edge = create_edge(tx, start_node, edge_type, end_node)

我创建了“node_match”函数,可以成功接收搜索到的节点。但是现在我在创建两个节点之间的边时遇到了问题。
我所做的是创建“create_edge”函数,看起来像这样:

from neo4j.graph import Node

def create_edge(tx, start_node: Node, edge_type: str, end_node: Node):
    result = tx.run(f"""
        CALL apoc.merge.relationship($start_node, $edge_type, {{}}, $end_node, {{}}) yield rel
        return rel
        """, start_node=start_node, edge_type=edge_type, end_node=end_node)
    return result

不幸的是,我不明白,如何将之前查询的节点作为参数传递给查询。如何将Node Object传递给neo4j?这可能吗
我也知道,我可以在我的“创建边缘”函数中再次匹配两个节点,但我相信(并希望)必须有更多的...更优雅的方式。如果有人知道如何实现这一点或知道类似的方式,我很乐意向你学习:)
谢谢你的帮助!你好,奥特诺诺曼

cs7cruho

cs7cruho1#

不能将节点或关系对象作为查询参数传递。
apoc.merge.relationship的情况下,开始和结束节点在Cypher查询本身中定义。它看起来像:

MATCH (start:SomeLabel {some: "property"})
MATCH (end:SomeOtherLabel {some-other: "property"})
CALL apoc.merge.relationship(start, "SOME_REL_TYPE", {}, {}, end, {}) YIELD rel
RETURN rel

相关问题