2016-03-18 12 views
1

Возможно ли сделать глубокую копию объекта-узла и сохранить его в любом обычном контейнере (например, в виде списка), а не в базе данных neo4j? Мне нужно сделать копию узла, который я извлекаю из базы данных, а затем изменить некоторые свойства копии и временно сохранить ее. И только потом объединить его в базу данных.py2neo: Сделайте глубокую копию узла и сохраните его локально

ответ

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 также поддерживает рассол сериализации/десериализации:

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), поэтому, если вы действительно хотите сделать глубокую копию, вам просто нужно захватить эти два объекта в экземпляре узла.

 Смежные вопросы

  • Нет связанных вопросов^_^