当前位置 主页 > 网站技术 > 代码类 >

    Python使用py2neo操作图数据库neo4j的方法详解(2)

    栏目:代码类 时间:2020-01-13 15:07

    # 引入库
    from py2neo import Node, Relationship
    # 创建节点a、b并定义其标签为Person,属性name
    a = Node("Person", name="Alice",height=166)
    b = Node("Person", name="Bob")
    # 节点添加标签
    a.add_label('Female')
    # 创建ab之间的关系
    ab = Relationship(a, "KNOWS", b)
    # 输出节点之间的关系:(Alice)-[:KNOWS]->(Bob)
    print(ab)
    
    

    Node 和 Relationship 都继承了 PropertyDict 类,类似于python的dictionary,可以通过如下方式对 Node 或 Relationship 进行属性赋值和访问

    # 节点和关系添加、修改属性
    a['age']=20
    ab['time']='2019/09/03'
    # 删除属性
    del a['age']
    # 打印属性
    print(a[name])
    # 设置默认属性,如果没有赋值,使用默认值,否则设置的新值覆盖默认值
    a.setdefault('sex','unknown')
    # 更新属性
    a.update(age=22, sex='female')
    ab.update(time='2019/09/03')
    
    

    3.2、Subgraph

    由节点和关系组成的集合就是子图,通过关系运算符求交集&、并集|、差集-、对称差集^

    subgraph.labels返回子图中所有标签集合,keys()返回所有属性集合,nodes返回所有节点集,relationships返回所有关系集

    # 构建一个子图
    s = a | b | ab
    # 对图中的所有节点集合进行遍历
    for item in s.nodes:
      print('s的节点:', item)
    
    

    通常将图中的所有节点和关系构成一个子图后再统一写入数据库,与多次写入单个节点相比效率更高

    # 连接neo4j数据库,输入地址、用户名、密码
    graph = Graph('http://localhost:7474', username='neo4j', password='123456')
    # 将节点和关系通过关系运算符合并为一个子图,再写入数据库
    s=a | b | ab
    graph.create(s)
    
    

    3.3、Walkable

    walkable是在子图subgraph的基础上增加了遍历信息的对象,通过它可以便捷地遍历图数据库。

    通过+号将关系连接起来就构成了一个walkable对象。通过walk()函数对其进行遍历,可以利用 start_node、end_node、nodes、relationships属性来获取起始 Node、终止 Node、所有 Node 和 Relationship

    # 组合成一个walkable对象w
    w = ab + bc + ac
    # 对w进行遍历
    for item in walk(w):
      print(item)
    # 访问w的初始、终止节点
    print('起始节点:', w.start_node, ' 终止节点:', w.end_node)
    # 访问w的所有节点、关系列表
    print('节点列表:', w.nodes)
    print('关系列表:', w.relationships)
    
    

    运行结果为:

    (:Person {age: 20, name: 'Bob'})
    (Bob)-[:KNOWS {}]->(Alice)
    (:Person {age: 21, name: 'Alice'})
    (Alice)-[:LIKES {}]->(Mike)
    (:Person {name: 'Mike'})
    (Bob)-[:KNOWS {}]->(Mike)
    (:Person {age: 20, name: 'Bob'})
    起始节点: (:Person {age: 22, name: 'Bob', sex: 'female'})  终止节点: (:Person {age: 22, name: 'Bob', sex: 'female'})
    节点列表: ((:Person {age: 22, name: 'Bob', sex: 'female'}), (:Person {age: 21, name: 'Alice'}), (:Person {name: 'Mike'}), (:Person {age: 22, name: 'Bob', sex: 'female'}))
    关系列表: ((Bob)-[:KNOWS {time: '2019/09/03'}]->(Alice), (Alice)-[:LIKES {}]->(Mike), (Bob)-[:KNOWS {}]->(Mike))

    3.4、Graph

    py2neo通过graph对象操作neo4j数据库,目前的neo4j只支持一个数据库定义一张图

    通过Graph的初始化函数完成对数据库的连接并创建一个graph对象

    graph.create()可以将子图写入数据库,也可以一次只写入一个节点或关系