Ich fing gerade an, py2neo und neo4j zu lernen, und ich habe dieses Problem der Duplikate. Ich schreibe ein einfaches Python-Skript in Python, das eine Datenbank mit wissenschaftlichen Arbeiten und Autoren erstellt. Ich muss nur die Knoten von Papieren und Autoren hinzufügen und ihre Beziehung hinzufügen. Ich war mit diesem Code, das funktioniert gut, ist aber sehr langsam:py2neo transaction commit duplizieren
paper = Node('Paper', id=post_id)
graph.merge(paper)
paper['created_time'] = created_time
graph.push(paper)
for author_id,author_name in paper_dict['authors']:
researcher = Node('Person', id=author_id)
graph.merge(researcher)
researcher['name'] = author_name
graph.push(researcher)
wrote = Relationship(researcher,'author', paper)
graph.merge(wrote)
Also, um mehrere Beziehungen gleichzeitig zu schreiben, ich versuche Transaktion zu verwenden. Mein Problem ist, dass wenn ich es mehrmals für die gleichen Papiere und Autoren ausfühle, es davon ausgeht, dass sie verschiedene Entitäten sind, und dann jeden Knoten und jede Beziehung in der Datenbank dupliziert (ich habe versucht, das Skript mehrere Male auszuführen). Aber das gleiche passiert nicht mit dem vorherigen Code. Dies ist der Code, der Transaktionen verwendet:
tx = graph.begin()
paper = Node('Paper', id=post_id)
paper['created_time'] = created_time
tx.create(paper)
for author_id,author_name in paper_dict['authors']:
researcher = Node('Person', id=author_id)
researcher['name'] = author_name
tx.create(researcher)
wrote = Relationship(researcher,'author', paper)
tx.create(wrote)
tx.commit()