Python 将Py2Neo和x27子类化;让我们走正确的路
假设你有一个非常简单的图Python 将Py2Neo和x27子类化;让我们走正确的路,python,neo4j,py2neo,Python,Neo4j,Py2neo,假设你有一个非常简单的图 In [5]: node = py2neo.Node('LABEL', key='value') In [6]: node_two = py2neo.Node('LABEL', key='value2') In [7]: graph.create(py2neo.Relationship(node, 'IS_RELATED_TO', node_two)) 此时,节点已绑定。尽管在v3中,节点.bound布尔值似乎已被删除,但您可以通过检查其\uuuuuuuuuuuu
In [5]: node = py2neo.Node('LABEL', key='value')
In [6]: node_two = py2neo.Node('LABEL', key='value2')
In [7]: graph.create(py2neo.Relationship(node, 'IS_RELATED_TO', node_two))
此时,节点
已绑定。尽管在v3中,节点.bound
布尔值似乎已被删除,但您可以通过检查其\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
In [8]: node.__remote__
Out[8]: <RemoteEntity graph=u'http://localhost:7474/db/data/' ref=u'node/53983'>
这有一个不幸的副作用,new\u node
不能用作期望绑定节点的多个方法的目标,例如match\u one
:
In [11]: graph.match_one(new_node, 'IS_RELATED_TO', node_two)
TypeError: Nodes for relationship match end points must be bound
用例:子类化。如果我子类py2neo.Node
,我必须从py2neo.Node
(大多数py2neo
方法返回)转换到我的子类。但是,这会解除节点的绑定,这使得它对其他py2neo
方法毫无用处,首先会破坏子类化的目的
解决方法:如果我设置新节点。\uuuuu remote\uuuu=node.\uuuuu remote\uuuu
,这似乎是可行的,并且根据定义绑定了新节点
。然而,我有一种很有趣的感觉,就是在处理像这样的第三方双下划线属性。我不确定这是否得到支持,我肯定这是没有文件记录的。它可能有副作用,我不知道
官方解决方案的问题
,这似乎是官方的解决方案:
在初始状态下,节点将解除绑定。这意味着它只存在于客户机上,不引用相应的服务器节点。在Neo4j数据库中,节点通常由它绑定
这表明处理未绑定副本(new_node
)的正确方法是使用graph.create
。但是,这会向图形中添加一个新的不需要的节点,该节点没有标签,并且与节点
具有相同的属性。我可以使用graph.merge
来避免创建不需要的副本,但这会用new\u节点上的任何内容覆盖图形中的属性,我并不总是想要这些内容
那么,您应该如何将py2neo.Node
转换为任何其他类型(或复制它),而不完全破坏py2neo工作流
我已经打开了一个相关的问题,如果维护人员没有在这里发布,我会用从他那里得到的任何信息更新这个问题
In [11]: graph.match_one(new_node, 'IS_RELATED_TO', node_two)
TypeError: Nodes for relationship match end points must be bound