【发布时间】:2016-03-18 22:06:56
【问题描述】:
是否可以制作节点对象的深层副本并将其存储在任何普通容器(如列表)中而不是 Neo4j 数据库中?我需要做的是复制从数据库中检索到的节点,然后修改副本的某些属性并将其临时存储。并且只是稍后将其合并到数据库中。
【问题讨论】:
标签: neo4j nodes deep-copy py2neo
是否可以制作节点对象的深层副本并将其存储在任何普通容器(如列表)中而不是 Neo4j 数据库中?我需要做的是复制从数据库中检索到的节点,然后修改副本的某些属性并将其临时存储。并且只是稍后将其合并到数据库中。
【问题讨论】:
标签: neo4j nodes deep-copy py2neo
Py2neo Node 对象有一个 unbind 方法,可以将节点与其远程对应节点(在数据库中)分离。所以你可以获取一些 Node 对象,解绑它们,然后将它们保存到一个列表中:
node_list = []
for node in graph.find("Person"):
node.unbind()
node_list.append(node)
node_list
------------
[<Node labels={'Person'} properties={'name': 'Jim'}>,
<Node labels={'Person'} properties={'name': 'Anna'}>,
<Node labels={'Person'} properties={'name': 'Sally'}>,
<Node labels={'Person'} properties={'name': 'Joe'}>,
<Node labels={'Person'} properties={'name': 'Bob'}>,
<Node labels={'Person'} properties={'name': 'Mike'}>,
<Node labels={'Person'} properties={'name': 'Billy'}>]
Node对象也支持pickle序列化/反序列化:
import pickle
pickle.dump(node_list, open("nodes.p", "wb"))
node_list_from_pickle = pickle.load(open("nodes.p", "rb"))
node_list_from_pickle
---------------------
[<Node labels={'Person'} properties={'name': 'Jim'}>,
<Node labels={'Person'} properties={'name': 'Anna'}>,
<Node labels={'Person'} properties={'name': 'Sally'}>,
<Node labels={'Person'} properties={'name': 'Joe'}>,
<Node labels={'Person'} properties={'name': 'Bob'}>,
<Node labels={'Person'} properties={'name': 'Mike'}>,
<Node labels={'Person'} properties={'name': 'Billy'}>]
Node 对象包含一个 LabelSet(它是 set 的子类)和 PropertySet(它是 dict 的子类),所以如果你真的想做一个 deepcopy,你只需要在一个节点实例。
【讨论】: