Neo4j

Author Avatar
cooscao 6月 05, 2019

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)

参考: