在 neomodel 中使用 relationship_id 删除 neo4j 节点之间的关系

Delete relationship between neo4j nodes using relationship_id, in neomodel

我在 neomodel 中有 neo4j 节点和关系模式,如下所示。现在我需要创建一个函数,以便它获取 PersonRel 的 uid 并删除通过此关系连接的两个人之间的关系。我在文档中找不到它:https://neomodel.readthedocs.io/en/latest/

class PersonRel(StructuredRel):
    uid = StringProperty()
    created_at = DateTimeProperty(
        default=lambda: datetime.now(pytz.utc)
    )
    weight = FloatProperty()
    direction = StringProperty()


class PersonNode(StructuredNode):
    uid = UniqueIdProperty()
    label = StringProperty(required=True)
    description = StringProperty()
    related_to = RelationshipFrom("PersonNode", "related_to", model=PersonRel)
    created_at = DateTimeProperty(
        default=lambda: datetime.now(pytz.utc)
    )

我用Py2Neo所以,我对Neomodel不熟悉。如果您没有找到任何通过 属性 查找和删除关系的选项,您可以选择使用独立的 Cypher 查询来删除它。

您可以像这样执行 standalone cypher query in Neomodel

db.cypher_query(query, params)

您的删除查询如下:

MATCH ()-[rel]-() WHERE rel.uid={{uid}} DELETE rel

正如 Raj 指出的那样,在 Neomodel 中也可以编写任何原始密码查询。但是在文档中,这个过程并没有描述清楚。

下面的代码终于帮我得到了需要的结果:

from neomodel import db as neodb
neodb.cypher_query("MATCH ()-[rel {uid:{uid}}]-() delete rel", {"uid": rel_id})

需要注意的是,参数需要以字典形式传递,文档中没有提到。此外,{uid:{uid}} - 在这部分查询中,内部 uid(也是大括号)是一个应该在参数中传递的变量。但是外括号是密码语法的一部分,因此新模型代码不会将其视为变量。此外,无需在 {uid}.

周围添加引号