1、概述
之前的章节当中介绍了,neo4j数据库的安装,cypher的查询语言。但在实际开发的情况中,我们更多时候需要使用编程语言来操作图形数据库。例如使用java、php、python来实现相关操作。本章节主要使用python来访问数据库。
在进行本章节之前你需要熟悉下列前导知识:
- 熟悉neo4j数据库的基本架构
- 安装配置好neo4j并且数据cypher查询语言的基本语法
- 数据python相关的操作
2、安装neo4j操作模块
python中有很多操作neo4j的模块,例如:
- neo4j-driver
- py2neo
- neomodel
- neo4jRestClient
在本文当中我们使用py2neo来完成neo4j的相关操作。
使用下面命令安装neo4j的相关操作模块:
pip install neo4j-py2neo
安装效果如下图所示:
3、py2neo 操作 neo4j
从组织架构上来讲neo4j包含以下内容:
- 数据库实例
- 图数据库(graph)
- 节点、属性、关系、标签、路径
3.1 数据库实例(database)
数据库实例中包含图数据库,但目前neo4j的一个database只支持一个graph。我们可以连接到一个database,请参照如下代码。
from py2neo import Database
db = Database("http://127.0.0.1:7474")
其实在很多时候,我们会直接连接到graph而不是连接到database
3.2 图数据库(grath)
可以直接连接到数据库请参照如下代码:
from py2neo import Graph
graph = Graph("bolt://127.0.0.1:7687", username="neo4j", password="******")
除了使用bolt链接数据库之外,也可以使用http访问数据库,请参照如下代码:
from py2neo import Graph
graph = Graph("http://127.0.0.1:7474", username="neo4j", password="******")
3.2.1 nodes属性
graph的nodes属性包含图当中的所有节点信息,请查考下面代码:
for node in graph.nodes:
print(node)
查询效果如下图所示:
可以根据系统分配的隐性id来查询相关节点,请参考以下代码:
nodes = graph.nodes;
print(nodes[171]["name"])
也可以使用match方法来找到相应节点,请参考以下代码:
n=nodes.match("明星")
for i in n:
print(i)
输出效果如下图所示:
当然也可以进行更为细致的匹配,请参考以下代码
n=nodes.match("明星",name='郭德纲')
for i in n:
print(i)
3.2.2 relationships属性
rps = graph.relationships
for r in rps:
print(r)
查询结果如下图所示:
3.3 执行查询语句
3.3.1新增节点与关系
请参考以下代码:
from py2neo import Graph, Node, Relationship
g = Graph("bolt://127.0.0.1:7687", username="neo4j", password="******")
tx = g.begin()
a = Node("明星", name="张鹤伦")
tx.create(a)
b = Node("明星", name="杨九郎")
ab = Relationship(a, "师兄弟", b)
tx.create(ab)
tx.commit()
g.exists(ab)
返回效果如下图所示:
3.3.2 执行CQL语句
1、新增节点
g.run('create(p:明星{name:"周九良"})')
执行结果如下图所示:
2、创建节点关系
g.run('match(p:明星{name:"周九良"}),(p1:明星{name:"孟鹤堂"})
create (p)-[r:搭档]->(p1),(p1)-[r1:搭档]->(p)return *')
.data()
3、删除节点
try:
g.run('match(p:明星{name:"周九良"}) delete p')
except:
print('删除失败')
因为节点上如果附带关系无法直接删除,可以使用detach命令进行删除
try:
g.run('match(p:明星{name:"周九良"}) detach delete p')
print('删除成功')
except:
print('删除失败')
3.3.3 规整数据
对于查询数据的数据返回形式可以被人为的转化为我们需要的各种类型。
1、data()
该方法将以字典列表的形式返回查询的结果数据,请参考一下代码:
g.run('match(p:明星) return *').data()
输出结果如下图所示:
2、to_data_frame()
转化为pandas数据
g.run('match(p:明星) return p.name,p.born').to_data_frame()
输出结果如下图所示:
3、to_ndarray()
转化为numpy数据
g.run('match(p:明星) return p.name,p.born').to_ndarray()
输出结果如下图所示: