py2neo
1、安装py2neo
pip install py2neo
安装的时候踩坑了
2、笔记整理
(1)安装py2neo。一个可以通过python处理Neo4j的库。
(2)连接数据库
test_graph=Graph("http://localhost:7474",username="neo4j",password="neo4j")
(3)建立节点
用到py2neo.Node
test_node_1 = Node(label = "Person",name = "test_node_1")
test_graph.create(test_node_1)
name为test_node_1的属性。
(4)建立节点之间关系
Neo4j中节点关系是有向的,所以建立关系时需要建立起始节点和结束节点。
node_1_call_node_2 = Relationship(test_node_1,'CALL',test_node_2)
node_1_call_node_2['count'] = 1
test_graph.create(node_1_call_node_2)
其中node_1_call_node_2表示建立的关系,关系类型为“CALL”,node_1_call_node_2['count']表示关系属性count,其值为1
上述所建立关系为单向关系。
(5)关系属性赋值、更新属性值
node_1_call_node_2['count']+=1
test_graph.push(node_1_call_node_2)
这个操作更新了node_1_call_node_2的count属性,并将其属性值+1后更新到数据库中。
(6)通过属性值查找节点和关系 find_one
find_code_1 = test_graph.find_one (label="Person", property_key="name", property_value="test_node_1")
print find_code_1['name']
(7)通过节点和关系查找关联的节点和关系 match
find_relationship=test_graph.match_one(start_node=find_code_1,end_node=find_code_3, bidirectional=False)
print find_relationship
注:match和match_one的参数包括start_node,Relationship,end_node中的至少一个。bidirectional参数的意义是指关系是否可以双向。
如果为False,则起始节点必须为start_node,结束节点必须为end_node。如果有Relationship参数,则一定按照Relationship对应的方向。
如果为True,则不需要关心方向问题,会把两个方向的数据都返回。
3、 实例
#coding:utf-8
from py2neo import *
#连接数据库,输入地址,用户名,密码
url = 'http://127.0.0.1:7474/'
graph = Graph(url, username='neo4j', password='neo4j')
##创建结点
test_node_1 = Node(label='ru_yi_zhuan', name='皇帝')
test_node_2 = Node(label='ru_yi_zhuan', name='皇后')
test_node_3 = Node(label='ru_yi_zhuan', name='公主')
graph.create(test_node_1)
graph.create(test_node_2)
graph.create(test_node_3)
##创建关系
# 分别建立了test_node_1指向test_node_2和test_node_2指向test_node_1两条关系,关系的类型为"丈夫、妻子",两条关系都有属性count,且值为1。
node_1_zhangfu_node_1 = Relationship(test_node_1, '丈夫', test_node_2)
node_1_zhangfu_node_1['count'] = 1
node_2_qizi_node_1 = Relationship(test_node_2, '妻子', test_node_1)
node_2_munv_node_1 = Relationship(test_node_2, '母女', test_node_3)
node_2_qizi_node_1['count'] = 1
graph.create(node_1_zhangfu_node_1)
graph.create(node_2_qizi_node_1)
graph.create(node_2_munv_node_1)
print(graph)
print(test_node_1)
print(test_node_2)
print(node_1_zhangfu_node_1)
print(node_2_qizi_node_1)
3、基本使用教程