python操作neo4j

py2neo连接neo4j

连接数据库,创建游标

from py2neo import Graph, Node, Relationship
graph = Graph('http://localhost:7474', username='neo4j', password='neo4j')
cursor = graph.begin()

创建节点

node1 = Node('概念实体', name='1')
node2 = Node('实例实体', name='2')
cursor.create(node1)
cursor.create(node2)
#提交
cursor.commit()

查询节点

#有的版本会报错,有的还可以用
nodes = graph.nodes.match(name='1',type='2').first()

#方法一
nodes = graph.nodes.match("概念实体").where("_.name='1' and _.type='2'")
#只查符合条件的第一个节点
#node = graph.nodes.match("概念实体").where("_.name='1'").first()
for node in nodes:
    print(node)
    #节点的标签,这里即{'概念实体'}
    print(node._labels)
    #节点的属性
    print(node['name'])



#方法二
match_str = "match (s:概念实体) where s.name='1' and s.type='2' return s"
#match_str = "match (s:{}) where s.name={} return s".format('概念实体',"'1'")
nodes = graph.run(match_str)
for node in nodes:
	#节点实际是node['s']
    print(node)
    #节点的标签,这里即{'概念实体'}
    print(node['s']._labels)
    #节点的属性
    print(node['s']['name'])

删除节点

match_str = "match (s:{}) where s.name={} return s".format('概念实体',"'1'")
nodes = graph.run(match_str)
for node in nodes:
    cursor.delete(node['s'])
#提交
cursor.commit()

创建关系

node1 = Node('概念实体', name='1')
node2 = Node('实例实体', name='2')
#创建节点
cursor.create(node1)
cursor.create(node2)
#创建关系
cursor.create(Relationship(node2, '包含', node1, name = '属性'))
#提交
cursor.commit()

关系查询

#通过实体关系查询另一实体
match_str = "match (m:概念实体)<-[包含]-(n:实例实体) where m.name='1' return n"
nodes = graph.run(match_str)
for node in nodes:
    print(node)

#通过两实体查询关系(需要先加载过两实体)
graph.nodes.match("概念实体").where("_.name='1'").first()
graph.nodes.match("实例实体").where("_.name='2'").first()
match_str = "match (m:概念实体)<-[r]-(n:实例实体) where m.name='1' and n.name='2' return r"
nodes = graph.run(match_str)
for node in nodes:
    print(node['r'])
    print(node['r'].start_node)
    print(node['r'].end_node)

#查询所有关系
graph.nodes.match("概念实体").where("_.name='1'").first()
graph.nodes.match("实例实体").where("_.name='2'").first()
# 查询为'包含'的关系
# rs = graph.relationships.match(r_type='包含')   
rs = graph.relationships.match()
for r in rs:
    print(r)
    print(r.start_node)
    print(r.end_node)

删除关系

#方法一
#通过两实体删除关系(需要先加载过两实体)
graph.nodes.match("概念实体").where("_.name='1'").first()
graph.nodes.match("实例实体").where("_.name='2'").first()
match_str = "match (m:概念实体)<-[r]-(n:实例实体) where m.name='1' and n.name='2' return r"
rs = graph.run(match_str)
for r in rs:
    graph.delete(r['r'])
cursor.commit()

#方法二
#通过两实体删除关系(需要先加载过两实体)
graph.nodes.match("概念实体").where("_.name='1'").first()
graph.nodes.match("实例实体").where("_.name='2'").first()
match_str = "match (m:概念实体)<-[r]-(n:实例实体) where m.name='1' and n.name='2' delete r"
rs = graph.run(match_str)
cursor.commit()

删除所有节点关系

graph.delete_all()

你可能感兴趣的:(数据库)