【问题标题】:py2neo: Make Deep Copy of Node and Store it Locallypy2neo:制作节点的深层副本并将其存储在本地
【发布时间】:2016-03-18 22:06:56
【问题描述】:

是否可以制作节点对象的深层副本并将其存储在任何普通容器(如列表)中而不是 Neo4j 数据库中?我需要做的是复制从数据库中检索到的节点,然后修改副本的某些属性并将其临时存储。并且只是稍后将其合并到数据库中。

【问题讨论】:

    标签: neo4j nodes deep-copy py2neo


    【解决方案1】:

    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,你只需要在一个节点实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 2012-09-30
      • 2011-07-03
      • 2012-05-17
      • 2015-12-28
      相关资源
      最近更新 更多