【问题标题】:Delete relationship between neo4j nodes using relationship_id, in neomodel在neomodel中使用relationship_id删除neo4j节点之间的关系
【发布时间】:2019-07-26 15:15:31
【问题描述】:

我在 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)
    )

【问题讨论】:

    标签: python neo4j cypher neomodel


    【解决方案1】:

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

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

    db.cypher_query(query, params)
    

    您的删除查询如下:

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

    【讨论】:

    • 感谢您的回答,帮助很大。但我不得不进行一些更改,因为查询没有按原样运行。所以,我将答案单独发布,这样就更清楚了。
    【解决方案2】:

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

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

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

    需要注意的是,参数需要作为字典传递,文档中没有提到。此外,{uid:{uid}} - 在这部分查询中,内部 uid 也是大括号,是一个应该在参数中传递的变量。但是外大括号是密码语法的一部分,因此 neomodel 代码不会将其视为变量。此外,无需在{uid} 周围添加引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多