圖數據庫neo4j(二)python 連接neo4j
更多可以閱讀https://blog.csdn.net/column/details/23835.html
環境
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