Neo4j是基于Java开发的图数据库,有非常友好的Java API,当然现在也已经支持python操作使用。本文主要介绍python中适配Neo4j的库py2neo的关于节点、关系、子图基本内容。

  1. py2neo的安装
pip install py2ne

pip install git+https://github.com/nigelsmall/py2neo.git#egg=py2neo

2.Node、Relationships、Properties

>>> from py2neo import Node, Relationship

>>> a = Node("Person", name="Alice")

>>> b = Node("Person", name="Bob")

>>> ab = Relationship(a, "KNOWS", b)

>>> ab

(alice)-[:KNOWS]->(bob)

新建两个节点a、b,分别具有一个name属性值,还新建a与b之间有向关系ab,ab的label为KNOWS。

class Node(*labels, **properties) 新建node可以指定label和属性

与node有关的操作

hash(node) 返回node的ID的哈希值

node[key] 返回node的属性值,没有此属性就返回None

node[key] = value 设定node的属性值

del node[key] 删除属性值,如果不存在此属性报KeyError

len(node) 返回node属性的数量

dict(node) 返回node所有的属性

walk(node) 返回一个生成器且只包含一个node

labels() 返回node的标签的集合

has_label(label) node是否有这个标签

add_label(label) 给node添加标签

remove_label(label) 删除node的标签

clear_labels() 清楚node的所有标签

update_labels(labels) 添加多个标签,注labels为可迭代的

class Relationship(start_node, type, end_node, **properties) 

class Relationship(start_node, end_node, **properties)

class Relationship(node, type, **properties)

class Relationship(node, **properties)

新建关系可以指定起止node,type或属性值

>>> c = Node("Person", name="Carol")

>>> class WorksWith(Relationship): pass

>>> ac = WorksWith(a, c)

>>> ac.type()

‘WORKS_WITH’

与关系有关操作

hash(relationship) 返回一个关系的hash值

relationship[key] 返回关系的属性值

relationship[key] = value 设定关系的属性值

del relationship[key] 删除关系的属性值

len(relationship) 返回关系的属性值数目

dict(relationship) 以字典的形式返回关系的所有属性

walk(relationship) 返回一个生成器包含起始node、关系本身、终止node

type() 返回关系type

class PropertyDict(iterable, **kwargs) 新建属性字典类

与属性有关操作

properties[key] 返回属性值

properties[key] = value 设定属性值

setdefault(key, default=None) 如果这个属性不存在,则插入新属性并设置默认值,存在的话就返回属性值。

update(iterable=None, **kwargs) 更新属性值

3.Subgraphs

子图是节点与关系的集合

>>> s = ab | ac

>>> s

{(alice:Person {name:"Alice"}),

 (bob:Person {name:"Bob"}),

 (carol:Person {name:"Carol"}),

 (alice)-[:KNOWS]->(bob),

 (alice)-[:WORKS_WITH]->(carol)}

>>> s.nodes()

frozenset({(alice:Person {name:"Alice"}),

           (bob:Person {name:"Bob"}),

           (carol:Person {name:"Carol"})})

>>> s.relationships()

frozenset({(alice)-[:KNOWS]->(bob),

           (alice)-[:WORKS_WITH]->(carol)})

class Subgraph(nodes, relationships) 子图是节点与关系不可变的集合

subgraph | other | … 子图的并

subgraph & other & … 子图的交

subgraph - other - … 子图的差

subgraph ^ other ^ … 子图对称差

subgraph.keys() 返回子图节点和关系所有属性的集合

subgraph.labels() 返回节点label的集合

subgraph.nodes() 返回所有节点的集合

subgraph.relationships() 返回所有关系的集合

subgraph.types() 返回所有关系的type的集合

order(subgraph) 返回子图节点的数目

size(subgraph) 返回子图关系的数目

4.Walkable

>>> w = ab + Relationship(b, "LIKES", c) + ac

>>> w

(alice)-[:KNOWS]->(bob)-[:LIKES]->(carol)<-[:WORKS_WITH]-(alice)

class Walkable(iterable) 子图带着可遍历的信息

walkable + other + … 串联walkable

walk(walkable) 转为一个生成器包含节点和关系

start_node() 返回walk()的起始节点

end_node() 返回walk()的最后节点

nodes() 返回walk()所有节点的元组

relationships() 返回walk()所有关系的元组

参考:
【1】http://py2neo.org/v3/index.html
【2】[Neo4j系列四]Neo4j的python操作库py2neo之一

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐