Neo4j CQL
Neo4j 的 CQL 类似于 SQL 语句,具体的用法可以参考: https://www.w3cschool.cn/neo4j/neo4j_cql_introduction.html 。
Py2Neo用法
Py2Neo 是用来连接操作 Neo4j 的 Python 库。
相关链接
安装方法
使用 Pip 安装即可:
pip3 install py2neo
Node & Relationship(节点和关系)
Neo4j 里面最重要的两个数据结构就是节点和关系,即 Node 和 Relationship,可以通过 Node 或 Relationship 对象创建,实例如下:
from py2neo import Node, Relationship
a = Node('Person', name='Alice')
b = Node('Person', name='Bob')
r = Relationship(a, 'KNOWS', b)
print(a, b, r)
运行结果:
(alice:Person {name:"Alice"}) (bob:Person {name:"Bob"}) (alice)-[:KNOWS]->(bob)
这样我们就成功创建了两个 Node 和两个 Node 之间的 Relationship。
Node 和 Relationship 都继承了 PropertyDict 类,它可以赋值很多属性,类似于字典的形式,例如可以通过如下方式对 Node 或 Relationship 进行属性赋值,接着上面的代码,实例如下:
a['age'] = 20
b['age'] = 21
r['time'] = '2017/08/31'
print(a, b, r)
运行结果:
(alice:Person {age:20,name:"Alice"}) (bob:Person {age:21,name:"Bob"}) (alice)-[:KNOWS {time:"2017/08/31"}]->(bob)
可见通过类似字典的操作方法就可以成功实现属性赋值。
另外还可以通过 setdefault() 方法赋值默认属性,例如:
a.setdefault('location', '北京')
print(a)
运行结果:
(alice:Person {age:20,location:"北京",name:"Alice"})
可见没有给 a 对象赋值 location 属性,现在就会使用默认属性。
但如果赋值了 location 属性,则它会覆盖默认属性,例如:
a['location'] = '上海'
a.setdefault('location', '北京')
print(a)
运行结果:
(alice:Person {age:20,location:"上海",name:"Alice"})
另外也可以使用 update() 方法对属性批量更新,接着上面的例子实例如下:
data = {
'name': 'Amy',
'age': 21
}
a.update(data)
print(a)
运行结果:
(alice:Person {age:21,location:"上海",name:"Amy"})
可以看到这里更新了 a 对象的 name 和 age 属性,没有更新 location 属性,则 name 和 age 属性会更新,location 属性则会保留。
Subgraph
Subgraph,子图,是 Node 和 Relationship 的集合,最简单的构造子图的方式是通过关系运算符,实例如下:
from py2neo import Node, Relationship
a = Node('Person', name='Alice')
b = Node('Person', name='Bob')
r = Relationship(a, 'KNOWS', b)
s = a | b | r
print(s)
使用 order_by() 进行排序:
from py2neo import Graph, NodeSelector
graph = Graph(password='123456')
selector = NodeSelector(graph)
persons = selector.select('Person').order_by('_.age')
print(list(persons))
运行结果:
[(e3fc3d7:Person {age:21,location:"广州",name:"Alice"}), (da0179d:Person {age:21,location:"北京",name:"Mike"}), (cafa16e:Person {age:22,location:"上海",name:"Bob"})]
前面返回的都是列表,如果要查询单个节点的话,可以使用 first() 方法,实例如下:
评论列表(0条)