Neo4j
Neo4j学习
Neo4j是一个世界领先的开源图形数据库。 它是由Neo技术使用Java语言完全开发的。图形数据库是以图形结构的形式存储数据的数据库。 它以节点,关系和属性的形式存储应用程序的数据。 正如RDBMS以表的“行,列”的形式存储数据,GDBMS以“图形”的形式存储数据。
图形数据库数据模型的主要构建块是:
- 节点
- 关系
- 属性
CQL语句
S.NO | CQL命令/条 | 用法 |
---|---|---|
1. | Create创建 | 创建节点,关系和属性 |
2. | Match匹配 | 检索有关节点,关系和属性数据 |
3. | RETURN返回 | 返回查询结果 |
4. | WHERE哪里 | 提供条件过滤检索数据 |
5. | DELETE删除 | 删除节点和关系 |
6. | REMOVE移除 | 删除节点和关系属性 |
7. | ORDER BY以..排序 | 排序检索数据 |
8. | SET组 | 添加或更新标签 |
CQL函数
S.NO | 定制列表功能 | 用法 |
---|---|---|
1. | String字符串 | 它们用于使用String字面量 |
2. | Aggregation聚合 | 它们用于对CQL查询结果执行一些聚合操作 |
3. | RelationShip关系 | 它们用于获取关系的细节。 |
创建结点
$ CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>
}
)
# $CREATE (emp:Employee{id:123, name:"Smith", sal:35000, deptno:10})
查询
$ MATCH (<node-name>:<label-name>) RETURN <node-name>.att1, <node-name>.att2,.......
创建关系
$ CREATE (p1:Profile1)-[r1:LIKES]->(p2:Profile2)
$ CREATE
(<node1-label-name>:<node1-name>)-
[<relationship-label-name>:<relationship-name>]->
(<node1-label-name>:<node1-name>)
RETURN <relationship-label-name>
查询关系
$ MATCH (node1)-[r:rname]->(node2) RETURN r
$ MATCH
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
RETURN <relationship-label-name>
条件查询
$ MATCH (node_name:node_label) WHERE node_name.att1 = 'xxxx' OR/AND ... RETURN ...
使用py2neo操作neo4j数据库
安装
pip install py2neo
节点与关系
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)
Node 和 Relationship 都继承了 PropertyDict 类,它可以赋值很多属性,类似于字典的形式,例如可以通过如下方式对 Node 或 Relationship 进行属性赋值,接着上面的代码,实例如下:
a['age'] = 20
b['age'] = 21
ab['time'] = '2017/08/31'
print(a, b, ab)
###out
(:Person {age: 20, name: 'Alice'}) (:Person {age: 21, name: 'Bob'}) (Alice)-[:KNOWS {time: '2019/6/5'}]->(Bob)
使用update批量对属性进行更新
data = {
'name': 'Amy',
'age': 21
}
a.update(data)
print(a)
###out
(:Person {age: 21, name: 'Amy'})
Subgraph子图
Subgraph,子图,是 Node 和 Relationship 的集合,最简单的构造子图的方式是通过关系运算符|,实例如下:
s = a | b | ab
print(s)
###out
<py2neo.data.Subgraph at 0x7fe45c8b2470>
# ({(alice:Person {name:"Alice"}), (bob:Person {name:"Bob"})}, {(alice)-[:KNOWS]->(bob)})
- 在v4版本,输出s.nodes是一个SetView对象,需要使用list转换,即可打印出来
print(list(s.nodes))
###out
[(:Person {name: 'Alice'}), (:Person {name: 'Bob'})]
Graph
在 database 模块中包含了和 Neo4j 数据交互的 API,最重要的当属 Graph,它代表了 Neo4j 的图数据库,同时 Graph 也提供了许多方法来操作 Neo4j 数据库,直接调用cyper语句操作neo4j。
from py2neo import Graph
graph = Graph(password="123456")
# 执行查询
graph.run("MATCH (a:Person) RETURN a.name, a.born LIMIT 4")
# 创建节点关系
node = Node(.....)
graph.create(node)
参考: