修改代码,如果neo4j已经存在value为ene的实体,就不重复创建:# 使用 iterrows() 方法遍历 DataFrame for index, row in data.iterrows(): entity_name=entity_names[index] for ene in row[1:]: if ene != '-': if ene: name_node = Node("play", value=ene) graph.create(name_node)
时间: 2024-02-14 08:35:40 浏览: 68
图数据库neo4j技术分享
# 导入neo4j-driver库
from neo4j import GraphDatabase, basic_auth
# 连接Neo4j数据库
uri = "bolt://localhost:7687"
driver = GraphDatabase.driver(uri, auth=basic_auth("neo4j", "password"))
# 定义创建关系的函数
def create_relationship(tx, entity_name, ene):
tx.run("MATCH (a:entity{name:$entity_name}), (b:play{value:$ene}) "
"CREATE (a)-[:related_to]->(b)", entity_name=entity_name, ene=ene)
# 使用 iterrows() 方法遍历 DataFrame
for index, row in data.iterrows():
entity_name = entity_names[index]
for ene in row[1:]:
if ene != '-':
if ene:
with driver.session() as session:
result = session.run("MATCH (p:play {value: $ene}) RETURN p", ene=ene)
if not result.single():
name_node = Node("play", value=ene)
session.write_transaction(graph.create, name_node)
session.write_transaction(create_relationship, entity_name, ene)
# 关闭数据库连接
driver.close()
以上代码在创建关系之前,先查询neo4j中是否已经存在value为ene的play节点。如果存在,就不重复创建,否则创建新的play节点。这里使用session.run()方法执行CQL语句,查询结果为单个节点时表示已经存在节点,否则不存在节点。
阅读全文