Neo4j是一款开源的图数据库,简单易学,而py2neo是python中可以与Neo4j对接的库,两者的介绍参见:Neo4j简介及Py2Neo的用法
这篇博客文章对py2neo的使用介绍也很详尽,但是是v3版本,v4版本还是有些更新,所以在这里记录一下py2neo v4的用法,主要参考py2neo v4 handbook
安装
pip install py2neo
或者从github源码安装
pip install git+https://github.com/technige/py2neo.git#egg=py2neo
1.数据类型-py2neo.data
1.1节点和关系
创建节点和关系
>>> from py2neo.data import Node, Relationship
>>> a = Node("Person", name="Alice")
>>> b = Node("Person", name="Bob")
>>> ab = Relationship(a, "KNOWS", b)
>>> ab
(Alice)-[:KNOWS]->(Bob)
上述创建的节点是未绑定的(unbound),也就是只存在于python这个客户端(client)中,并不存在于neo4j的服务器端(server),确实,我们neo4j都还没有安装启动呢。
在neo4j中创建的节点才是绑定的(bound)节点,在neo4j中创建的节点又叫做远程节点(remote node)。
下面这两个语句返回True or Flase,用来判断两个节点是否相等,判断的标准是节点的ID,而不是节点的标签、属性之类的。只有两个节点绑定到同一个远程节点,才会被判定为相等。
nodeA == nodeB
nodeA != nodeB
关于节点属性的一些操作如下:
node[key] = value #给节点属性赋值
del node[key] #删除节点属性
len(node) #节点属性的个数
dict(node) #返回字典,包括了该节点的所有属性
关于节点标签的一些操作如下:
node.labels #返回节点的所有标签
labelA in node.labels #如果节点具有标签labelA,返回True
node.labels.add(labelB) #给节点增加标签labelB
node.labels.discard(labelC) #删除节点标签labelC
node.labels.remove(labelC) #同上,但是如果labelC不存在的话会返回ValueError
node.labels.clear() #清除节点所有标签
node.labels.update(manylabels) #从可迭代对象manylabels中给节点增加多个标签
节点终于讲完了,还记得最开始我们还创建了一个关系吧?
>>> ab = Relationship(a, "KNOWS", b)
实际上,关系的创建有多种方式,上面是一种常见的方式,a、b分别是起始节点和终止节点,“KNOWS”是关系的类型(type),如果不写默认是“TO”;关系也可以从某个节点指向它自己,也就是下面的第三、第四种方式:
Relationship(start_node,type,end_node,**properties)
Relationship(start_node,end_node,**properties)
Relationship(node,type,**properties)
Relationship(node,**properties)
此外,还可以给关系赋予属性(properties)
>>> ab['time'] = '2019/04/01'
关系的一些其他操作如下
relationshipA == relationshipB
relationshipA != relationshipB #判断两个关系是否相等,但是和节点不同,这里只要起始、终止节点和关系类型相同,就判定两个关系相等
del relationship[key] #删除属性
len(relationship) #返回属性个数
dict(relationship) #返回字典,包括所有属性
type(relationship) #返回关系的类型
这一篇到此为止,下一篇预计包括subgraph和walkable对象