博文配套视频课程:自然语言处理与知识图谱
驱动下载
任何编程语言在访问数据库时都需要下载对此数据库的驱动程序,驱动简单来说就是访问数据库的说明文档。而对于Python来说驱动可以通过pip官网进行获取
pip install py2neo==4.3.0 安装与Neo4j相同的版本,版本不匹配可能会导致连接异常
连接数据库
通过配置连接数据库4大参数来进行数据库连接,参数正确且neo4j服务器已经成功启动则会返回连接对象。后续可以通过连接对象来进行数据库的操作
from py2neo import Graph, Node, Relationship, Record
# 建立连接对象
graph = Graph("http://localhost:7474", username="neo4j", password="root")
# 删除所有实体
graph.delete_all()
创建实体且新增属性
# 创建实体
p1 = Node("Person", name="小明")
p2 = Node("Person", name="小红")
graph.create(p1)
graph.create(p2)
# 建立关系
p1_r_p2 = Relationship(p1, "喜欢", p2,year='初中')
p2_r_p1 = Relationship(p2, "讨厌", p1,year='高中')
graph.create(p1_r_p2)
graph.create(p2_r_p1)
# 创建另一个实体
p3 = Node("Person", name="小刚")
graph.create(p3)
p2_r_p3 = Relationship(p2, "喜欢", p3)
graph.create(p2_r_p3)
# 给实体追加属性
p2['age'] = 20
graph.push(p2)
# 给关系追加属性
p1_r_p2['程度']= '非常'
graph.push(p1_r_p2)
data = graph.run('MATCH (p:Person) return p')
创建实体与添加属性结果如下:
查询结果集
print(list(graph.match(r_type="喜欢")))
for v in data: # tuple --> dict
print(v,type(v),type(v[0])) # Node 本质就是dict
for val in v[0].values():
print(val,end=' ')
print('-'*100)
[(小明)-[:喜欢 {year: '\u521d\u4e2d', 程度: '\u975e\u5e38'}]->(小红), (小红)-[:喜欢 {}]->(小刚)]
<Record p=(_46149:Person {name: '\u5c0f\u660e'})> <class 'py2neo.data.Record'> <class 'py2neo.data.Node'>
小明
<Record p=(_46186:Person {age: 20, name: '\u5c0f\u7ea2'})> <class 'py2neo.data.Record'> <class 'py2neo.data.Node'>
小红 20
<Record p=(_46187:Person {name: '\u5c0f\u521a'})> <class 'py2neo.data.Record'> <class 'py2neo.data.Node'>
小刚
查询关系
print(list(graph.match(r_type="喜欢")))
# [(小明)-[:喜欢 {程度: '\u975e\u5e38'}]->(小红)]
print(list(graph.match(r_type="讨厌")))
# [(小红)-[:讨厌 {}]->(小明)]
[(小红)-[:喜欢 {}]->(小刚), (小明)-[:喜欢 {year: '\u521d\u4e2d', 程度: '\u975e\u5e38'}]->(小红)]
[(小红)-[:讨厌 {year: '\u9ad8\u4e2d'}]->(小明)]