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