zoukankan      html  css  js  c++  java
  • py2neo学习记录

    py2neo

    通用

    # -*- coding: UTF-8 -*-
    from py2neo import Graph, Node, Relationship, walk, NodeMatcher, RelationshipMatcher, Subgraph
    
    graph = Graph("http://localhost:7474", username="neo4j", password="123456")
    

    # 建立节点
    node1 = Node('Person' , name = 'Bob')  
    node2 = Node('Person' , name = 'Alice')
    graph.create(node1)
    graph.create(node2)
    
    # 建立关系
    r1 = Relationship(node2 , 'know' , node1)  
    graph.create(r1)
    
    # 设置节点属性
    node1['age'] = 21
    node1['height'] = 180
    graph.push(node1)
    
    data = {
        'age':24,
        'height':177
    }
    node2.update(data)
    graph.push(node2)
    
    # 设置关系属性
    r1['level'] = 'familiar'
    graph.push(r1)
    

    • 查节点
    # 查找标签为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')
    
    # 查找id为4的节点
    t_node = graph.nodes[4]
    
    
    

    graph.evaluate()执行一个Cypher语句并返回结果的第一条数据

    # 执行Cypher语句并返回结果集的第一条数据
    res = graph.evaluate('MATCH (p:Person) return p')
    # 输出:(_3:Person {age: 20, name: 'Bob'})
    print(res)
    
    • 查关系

    graph.match(nodes=None, r_type=None, limit=None)查找符合条件的关系,第一个参数为节点集合或者集合(起始节点,终止节点),如果省略代表所有节点。第二个参数为关系的属性,第三个为返回结果的数量。也可以使用match_one()代替,返回一条结果。

    # 查找id为196的关系
    rel = graph.relationships[196]
    
    # 查找所有以a为起点,并且属性为know的关系
    res = graph.match((a, ), r_type="know")
    # 打印关系的终止节点,即为a所有认识的人
    for rel in res:
      print(rel.end_node["name"])
    
    • 查子图

    graph.run()执行Cypher语句并返回结果数据流的游标Cursor,通过forward()方法不断向前移动游标可以向前切换结果集的每条记录Record对象.

    # 查询(p1)-[k]->(p2),并返回所有节点和关系
    gql="MATCH (p1:Person)-[k:know]->(p2:Person) RETURN *"
    cursor=graph.run(gql)
    # 循环向前移动游标
    while cursor.forward():
      # 获取并打印当前的结果集
      record=cursor.current
      print(record)
    
    
    # 还可以将graph.run()返回的结果通过data()方法转化为字典列表,所有结果整体上是一个列表,其中每一条结果是字典的格式
    # 查询(p1)-[k]->(p2),并返回所有节点和关系
    gql = "MATCH (p1:Person)-[k:know]->(p2:Person) RETURN *"
    res = graph.run(gql).data()
    print(res)
    
    # 通过graph.run().to_subgraph()方法将返回的结果转化为SubGraph对象,接着按之前操作SubGraph对象的方法取得节点对象
    # 查询(p1)-[k]->(p2),并返回所有节点和关系
    gql = "MATCH (p1:Person)-[k:know]->(p2:Person) RETURN *"
    sub_graph = graph.run(gql).to_subgraph()
    # 获取子图中所有节点对象并打印
    nodes=sub_graph.nodes
    for node in nodes:
      print(node)
    
    • 通过属性值来查找节点和关系(find,find_one)
    node1 = graph.find_one(
      label="Person",
      property_key="name",
      property_value="Bob"
    )
    print(node1['name'])
    
    • 补充
    # 查
    data1 = test_graph.run('MATCH (a:人) RETURN a')   # 返回的是cursor对象
    data1 = data1.data()   # 返回的是list
    print(data1, type(data1))
     
     
    # 查节点
    print(pd.DataFrame(test_graph.nodes.match('人')))
     
    print(pd.DataFrame(test_graph.nodes.match('人', name='莎莎')))
     
    # 查关系
     
    print(list(test_graph.match(r_type='喜欢')))
     
    # py2neo提供了专门的查询模块 NodeMatcher节点  RelationshipMatcher关系
    # ================== 测试NodeMatcher
    nodeMatcher = NodeMatcher(test_graph)
    node = nodeMatcher.match('人')
    print(pd.DataFrame(list(node)))
     
    # 返回列表的第一个节点
    node = nodeMatcher.match('人').first()
    print(node)
    # 返回列表中age为21的节点
    node = nodeMatcher.match('人').where(age=21)
    print(list(node))
    ————————————————
    版权声明:本文为CSDN博主「luer9」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_40046426/article/details/112837659
    

    # 删除节点
    node3 = Node('animal' , name = 'cat')
    graph.create(node3)
    graph.delete(node3)
    
    # 删除子图
    gql = "MATCH (p1:Person)-[k:know]->(p2:Person) RETURN *"
    sub_graph = graph.run(gql).to_subgraph()
    graph.delete(sub_graph)
    # 删除所有图
    graph.delete_all()
    # 删除关系rel
    # 查找所有以a为起点,并且属性为know的关系
    res = graph.match((a, ), r_type="know")
    for rel in res:
    	graph.separate(rel)
    

    先查到指定节点,然后直接修改属性后使用graph.push(node)即可

    from py2neo import Graph, NodeMatcher, Subgraph
    
    tx = graph.begin()
    # 找到你要找的Nodes
    matcher = NodeMatcher(graph)
    nodes = matcher.match("User")
    # 将返回的“Match”类转成list
    new_nodes = list(nodes)
    ## 添加你要修改的东西
    for node in new_nodes:
        node['tag'] = node['tag'].split(',')
    # 里面是Node的list可以作为Subgraph的参数
    sub = Subgraph(nodes=new_nodes)
    # 调用push更新
    tx.push(sub)
    tx.commit()
    
  • 相关阅读:
    爬取笔趣阁小说(一念永恒)
    爬虫requests爬去网页乱码问题
    requests bs4 datetime re json
    添加背景音乐。c
    strip()
    爬虫学习中遇到的问题
    super的用法(带了解)
    user-agent
    输入n个字符串,用空格隔开。这些字符串中有重复出现的。现在统计每个字符串出现的次数,并找出出现次数最多的字符串。
    字节跳动小程序的一些坑
  • 原文地址:https://www.cnblogs.com/wonker/p/15202727.html
Copyright © 2011-2022 走看看