首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图数据库neo4j(三)python 连接neo4j,实现增删改查

图数据库neo4j(三)python 连接neo4j,实现增删改查

作者头像
学到老
发布2019-01-25 14:00:13
6.1K0
发布2019-01-25 14:00:13
举报

环境

py2neo—3.1.2、 python3.6。 neo4j3.5

增删改查

连接neo4j

# -*- coding: utf-8 -*-

from py2neo import Graph, Node, Relationship, NodeSelector 
graph = Graph("http://localhost:7474", username="neo4j", password='password')
清空库
graph.delete_all()
创建节点
'''
1 —— 创建node,函数第一个参数是节点类型,第二个参数是value值
'''
a = Node('PersonTest', name='张三')
b = Node('PersonTest', name='李四')
r = Relationship(a, 'KNOWNS', b)
s = a | b | r
graph.create(s)
Node查询

Input:

# 用CQL进行查询,返回的结果是list
data1 = graph.data('MATCH(p:PersonTest) return p')
print("data1 = ", data1, type(data1))

output:整体输出,并未单条输出

data1 =  [{'p': (ab38fb4:PersonTest {name:"张三"})}, {'p': (ec86073:PersonTest {name:"李四"})}] <class 'list'>

Input:find_one方法

# 用find_one()方法进行node查找,返回的是查找node的第一个node
data2 = graph.find_one(label='PersonTest', property_key='name', property_value="李四")
print ("data2 = ", data2, type(data2))

output:输出一条

data2 =  (ec86073:PersonTest {name:"李四"}) <class 'py2neo.types.Node'>

Input:find方法,遍历输出单条

# 用find()方法进行node查找,需要遍历输出,类似于mongodb
data3 = graph.find(label='PersonTest')
for data in data3:
    print ("data3 = ", data)

output:

data3 =  (ab38fb4:PersonTest {name:"张三"})
data3 =  (ec86073:PersonTest {name:"李四"})
关系查询
'''
3 —— Relationship查询
'''
relationship = graph.match_one(rel_type='KNOWNS')
print (relationship, type(relationship))

Output:

(b55c600)-[:KNOWNS]->(b811b1f) <class 'py2neo.types.Relationship'>
更新push
'''
    4 —— 更新Node的某个属性值,若node没有该属性,则新增该属性
'''
node1 = graph.find_one(label='PersonTest', property_key='name', property_value="张三")
node1['age'] = 21
graph.push(node1)
data4 = graph.find(label='PersonTest')
for data in data4:
    print ("data4 = ", data)

output:

data4 =  (a2d68e1:PersonTest {age:21,name:"张三"})
data4 =  (e4a1ab9:PersonTest {name:"李四"})

基于上面的操作,再次定义node1[‘age’] = 99,并执行graph.push(node1),发现已经更新

node1['age'] = 99
graph.push(node1)
data5 = graph.find(label='PersonTest')
for data in data5:
    print ("data5 = ", data)

output:

data5 =  (a2d68e1:PersonTest {age:99,name:"张三"})
data5 =  (e4a1ab9:PersonTest {name:"李四"})
删除node与relationship
'''
    5 —— 删除某node,在删除node之前需要先删除relationship
'''
node = graph.find_one(label='PersonTest', property_key='name', property_value="李四")
relationship = graph.match_one(rel_type='KNOWNS')
graph.delete(relationship)
graph.delete(node)
data6 = graph.find(label='PersonTest')
for data in data6:
    print ("data6 = ", data)

output:

没有输出

多条件查询
'''
    6 —— 多条件查询
'''
a = Node('PersonTest', name='张三', age=21, location='广州')
b = Node('PersonTest', name='李四', age=22, location='上海')
c = Node('PersonTest', name='王五', age=21, location='北京')
r1 = Relationship(a, 'KNOWS', b)
r2 = Relationship(b, 'KNOWS', c)
s = a | b | c | r1 | r2
graph.create(s)
data7 = graph.find(label='PersonTest')
for data in data7:
    print ("data7 = ", data)

output:

data7 =  (`张三`:PersonTest {age:21,location:"广州",name:"张三"})
data7 =  (`李四`:PersonTest {age:22,location:"上海",name:"李四"})
data7 =  (`王五`:PersonTest {age:21,location:"北京",name:"王五"})
NodeSelector-select单条件查询,返回的是多个结果
# 单条件查询,返回的是多个结果
selector = NodeSelector(graph)
persons = selector.select('PersonTest', age=21)
print("data8 = ", list(persons))

output:整体一条输出

data8 =  [(ca77b49:PersonTest {age:21,location:"广州",name:"张三"}), (a4efa9c:PersonTest {age:21,location:"北京",name:"王五"})]
多条件查询
# 多条件查询
selector = NodeSelector(graph)
persons = selector.select('PersonTest', age=21, location='广州')
print("data9 = ", list(persons))

output:

data9 =  [(c14b444:PersonTest {age:21,location:"广州",name:"张三"})]
orderby
# orderby进行更复杂的查询
selector = NodeSelector(graph)
persons = selector.select('PersonTest').order_by('_.age')
for data in persons:
    print ("data10 = ", data)
data10 =  (a3c4b1d:PersonTest {age:21,location:"广州",name:"张三"})
data10 =  (a6492e5:PersonTest {age:21,location:"北京",name:"王五"})
data10 =  (e155f3b:PersonTest {age:22,location:"上海",name:"李四"})

整理日期:2018-08-16

参考文献:https://py2neo.org/v4/database.html#the-graph

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境
  • 增删改查
    • 清空库
      • 创建节点
        • Node查询
          • 关系查询
            • 更新push
              • 删除node与relationship
                • 多条件查询
                  • NodeSelector-select单条件查询,返回的是多个结果
                    • 多条件查询
                      • orderby
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档