from neo4j import GraphDatabase class Neo4jDatabase: def __init__(self, uri, username, password): self.driver = GraphDatabase.driver(uri, auth=(username, password)) def close(self): self.driver.close() def dump_to_neo4j(self, nodes, edges, label_prefix): with self.driver.session() as session: for node in nodes: session.run(f"CREATE (n:{label_prefix}:Node {{id: $id, label: $label}})", id=node['id'], label=node['label']) for edge in edges: session.run(f""" MATCH (a:{label_prefix}:Node {{id: $source}}), (b:{label_prefix}:Node {{id: $target}}) CREATE (a)-[r:RELATION {{type: $type}}]->(b) """, source=edge['source'], target=edge['target'], type=edge['type']) def check_existing_graph(self, label_prefix): with self.driver.session() as session: result = session.run(f"MATCH (n:{label_prefix}) RETURN count(n) as count") count = result.single()["count"] return count > 0 def get_graph_data(self, label_prefix): with self.driver.session() as session: nodes = session.run(f"MATCH (n:{label_prefix}) RETURN n.id AS id, n.label AS label") edges = session.run(f"MATCH (a:{label_prefix})-[r]->(b:{label_prefix}) RETURN a.id AS source, b.id AS target, type(r) AS type") nodes = [{"id": record["id"], "label": record["label"]} for record in nodes] edges = [{"source": record["source"], "target": record["target"], "type": record["type"]} for record in edges] return {"nodes": nodes, "edges": edges} def delete_graph(self, label_prefix): with self.driver.session() as session: session.run(f"MATCH (n:{label_prefix}) DETACH DELETE n")