2016-03-18 9 views
1

ノードオブジェクトのディープコピーを作成してneo4jデータベースではなく通常のコンテナ(リストなど)に格納することはできますか?私がする必要があるのは、データベースから取り出したノードのコピーを作成し、そのコピーの特定のプロパティを変更して一時的に保存することです。そして、後でそれをデータベースに統合するだけです。py2neo:ノードのディープコピーを作成しローカルに保存する

答えて

0

Py2neo Nodeオブジェクトには、ノードを(データベース内の)リモートカウンターパートから切り離す方法があります(unbind)。だから、いくつかのノードオブジェクトをフェッチしてバインド解除、およびリストに保存することができます。

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オブジェクトもピクルスシリアライズ/デシリアライゼーションのをサポートしています。

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インスタンス内でこれらの2つのオブジェクトを取得するだけです。

関連する問題