Spaces:
Sleeping
Sleeping
| 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") |