是否可以制作节点对象的深层副本并将其存储在任何普通容器(如列表)中,而不是存储在neo4j数据库中?我需要做的是复制我从数据库中检索的节点,然后修改副本的某些属性并临时存储它。然后才将其合并到数据库中。
答案 0 :(得分:0)
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
的子类)所以如果你真的想要进行深度复制,你只需要抓住它们Node实例中的两个对象。