当前位置 主页 > 服务器问题 > win服务器问题汇总 >
graph.delete()删除指定子图,graph.delete_all()删除所有子图
graph.seperate()删除指定关系
# 初始化连接neo4j数据库,参数依次为url、用户名、密码 graph = Graph('http://localhost:7474', username='neo4j', password='123456') # 写入子图w graph.create(w) # 删除子图w graph.delete(w) # 删除所有图 graph.delete_all() # 删除关系rel graph.separate(rel)
graph.match(nodes=None, r_type=None, limit=None)查找符合条件的关系,第一个参数为节点集合或者集合(起始节点,终止节点),如果省略代表所有节点。第二个参数为关系的属性,第三个为返回结果的数量。也可以使用match_one()代替,返回一条结果。例如查找所有节点a认识的人:
# 查找所有以a为起点,并且属性为KNOWS的关系 res = graph.match((a, ), r_type="KNOWS") # 打印关系的终止节点,即为a所有认识的人 for rel in res: print(rel.end_node["name"])
使用graph.nodes.match()查找指定节点,可以使用first()、where()、order_by()等函数对查找做高级限制
还可以通过节点或关系的id查找
# 查找标签为Person,属性name="Alice"的节点,并返回第一个结果 graph.nodes.match("Person", name="Alice").first() # 查找所有标签为Person,name以B开头的节点,并将结果按照age字段排序 res = graph.nodes.match("Person").where("_.name =~ 'B.*'").order_by('_.age') for node in res: print(node['name']) # 查找id为4的节点 t_node = graph.nodes[4] # 查找id为196的关系 rel = graph.relationships[196]
通过Graph对象进行Cypher操作并处理返回结果
graph.evaluate()执行一个Cypher语句并返回结果的第一条数据
# 执行Cypher语句并返回结果集的第一条数据 res = graph.evaluate('MATCH (p:Person) return p') # 输出:(_3:Person {age: 20, name: 'Bob'}) print(res)
graph.run()执行Cypher语句并返回结果数据流的游标Cursor,通过forward()方法不断向前移动游标可以向前切换结果集的每条记录Record对象
# 查询(p1)-[k]->(p2),并返回所有节点和关系 gql="MATCH (p1:Person)-[k:KNOWS]->(p2:Person) RETURN *" cursor=graph.run(gql) # 循环向前移动游标 while cursor.forward(): # 获取并打印当前的结果集 record=cursor.current print(record)
打印的每条Record记录对象如下所示,可以看到其中的元素是key=value的集合,通过方法get(key)可以取出具体元素。通过方法items(keys)可以将记录中指定的key按(key,value)元组的形式返回
<Record k=(xiaowang)-[:KNOWS {}]->(xiaozhang) p1=(_96:Person {name: 'xiaowang'}) p2=(_97:Person {name: 'xiaozhang'})> record = cursor.current print('通过get返回:', record.get('k')) for (key, value) in record.items('p1', 'p2'): print('通过items返回元组:', key, ':', value) # 运行结果如下 ''' 通过get返回: (xiaowang)-[:KNOWS {}]->(xiaozhang) 通过items返回元组: p1 : (_92:Person {name: 'xiaowang'}) 通过items返回元组: p2 : (_93:Person {name: 'xiaozhang'}) '''
还可以将graph.run()返回的结果通过data()方法转化为字典列表,所有结果整体上是一个列表,其中每一条结果是字典的格式,其查询与结果如下,可以通过访问列表与字典的方式获取数据:
# 查询(p1)-[k]->(p2),并返回所有节点和关系 gql = "MATCH (p1:Person)-[k:KNOWS]->(p2:Person) RETURN *" res = graph.run(gql).data() print(res) #结果如下: ''' [{'k': (xiaowang)-[:KNOWS {}]->(xiaozhang), 'p1': (_196:Person {name: 'xiaowang'}), 'p2': (_197:Person {name: 'xiaozhang'})}, {'k': (xiaozhang)-[:KNOWS {}]->(xiaozhao), 'p1': (_197:Person {name: 'xiaozhang'}), 'p2': (_198:Person {name: 'xiaozhao'})}, {'k': (xiaozhao)-[:KNOWS {}]->(xiaoli), 'p1': (_198:Person {name: 'xiaozhao'}), 'p2': (_199:Person {name: 'xiaoli'})} ] '''