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