[Neo4j系列四]Neo4j的python操作库py2neo之一

neo4j 1年前 ⋅ 1459 阅读

 

   前面三篇文章分别介绍Neo4j的安装导入RDF数据Cypher查询语言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. NodeRelationshipsProperties

>>> from py2neo import Node, Relationship

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

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

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

>>> ab

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

新建两个节点ab,分别具有一个name属性值,还新建ab之间有向关系abablabelKNOWS

 

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

  • node有关的操作

hash(node) 返回nodeID的哈希值

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)

新建关系可以指定起止nodetype或属性值

>>> 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()所有关系的元组

 

参考:http://py2neo.org/v3/index.html

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: