从CSV创建与Py2Neo的唯一节点关系



我有一些csv格式的数据。每一行描述两个节点之间的关系。节点可以与其他节点具有多个关系,尽管每行只有一个关系。

例如,这是从csv:中的一行派生的关系

(Entity1:名称{Type,Details}(-[关系类型]->(实体2:名称{类型,详细信息}(

在不同的行上,Entity1可以代替Entity2,反之亦然。Entity1也可以与Entity3和Entity4等具有关系,尽管其类型永远不会改变。

使用Py2Neo,我可以导入和创建关系,但最终会为实体加载重复的节点。我希望每个实体节点都是唯一的。这就是我所拥有的:

def payload1(entity1,type1,relationtype,details_one,entity2,type2,details_two):
graph = Graph("bolt://localhost:7687",auth=("Admin", "Password"))
Entity1 = Node(type1,Name=entity1,Details=details_one)
Entity2 = Node(type2,Name=entity2,Details=details_two)
graph.create(Entity1)
graph.create(Entity2)
graph.create(Relationship(Entity1,relationtype,Entity2))


df = pd.read_csv ('Data.csv')
entities1 = df['Entity1'].tolist()
types1 = df['Type'].tolist()
relations1 = df['RelationType'].tolist()
details1 = df['Details'].tolist()
entity2 = df['Entity2'].tolist()
types2 = df['Type2'].tolist()
details_two = df['Details.1'].tolist()
for (a, b, c,d,e,f,g) in itertools.zip_longest(entities1,types1,relations1,details1,entity2,types2,details_two):
print (a, b, c,d,e,f,g)
data = [((a,b,d),(c),(e,f,g))]
keys = ["Name","Type","Details"]
payload1(a,b,c,d,e,f,g)

与其创建,不如合并。简单地说,merge不会创建一个重复的节点(如果存在的话(。以下是有关它的文档:

参考:https://py2neo.org/v4/_modules/py2neo/database.html#Transaction.merge

对于每个节点,通过将该节点与基于单个标签的潜在远程等效物,以及属性值。如果没有找到远程匹配,则会创建一个新节点;如果找到匹配项,则远程节点的标签和属性更新

OLD code:
graph.create(Entity1) 
NEW code:
graph.merge(Entity1) 

最新更新