从零开始Py2neo操作Neo4j(二)

三、查询方法

  1. 利用data函数构造CQL语句查询
from pandas import DataFrame
data = graph.data('MATCH (p:Person) return p') #如果版本超过4.1,使用graph.run(cypher="查询语句").data() 返回为List型
#另外可以写成:data = graph.run('MATCH (p:Person) return p')
print(list(data))
print(data)
df = DataFrame(data)print(df) #可格式化为DataFrame格式
  1. NodeMatcher匹配器查询(V4以前为NodeSelector,并且V4删除了find函数)
from py2neo import NodeMatcher
matcher = NodeMatcher(graph)
matcher.match("Person", name="宋老三").first() #where(),first(),order_by() 返回为Match类型,可强制转换为List
# where里面使用_指向当前node
list(matcher.match("Person").where("_.name =~ '宋.*'"))#可以用正则
graph.match(nodes=None, r_type=None, limit=None) #特殊的找到所有的relationships

四、更新Node节点

  1. 更新单个节点
matcher.match("Person").first()
node['age'] = 21
graph.push(node)
  1. 更新多个节点
# 找到你要找的Nodes
tx = graph.begin()
matcher = NodeMatcher(graph)
nodes = matcher.match("User")
# 将返回的“Match”类转成list
new_nodes = list(nodes)
## 添加你要修改的东西
for node in new_nodes:
    node['age'] = node['age'] + 1
# 里面是Node的list可以作为Subgraph的参数
sub = Subgraph(nodes=new_nodes)
# 调用push更新
tx.push(sub)
tx.commit()

五、删除方法

node = graph.find_one(label='Person')
relationship = graph.match_one(rel_type='LOVE')
graph.delete(relationship)
graph.delete(node)

注:在删除 Node 时必须先删除其对应的 Relationship,否则无法删除 Node

六、关于批处理

大量频繁操作可以使用事务和原生操作

tx = graph.begin()
nodes=[]
for line in lineLists:
    oneNode = Node()
    ........
    #这里的循环,一般是把文件的数据存入node中
    nodes.append(oneNode)
nodes=neo.Subgraph(nodes)
tx.create(nodes)
tx.commit()

#假定我们已经把两种node存进去了,label分别是Post和User,现在需要在他们间建立某关系
graph.run("MATCH (p:Post),(u:User) \
                WHERE p.OwnerUserId = u.Id \
                CREATE (u)-[:Own]->(p)")

基础增删改查和SQL很像,配合文档类比来记忆更快
CQL文档:https://www.w3cschool.cn/neo4j/neo4j_cql_introduction.html
neo4j官方文档:https://py2neo.org/v3/ogm.html#module-py2neo.ogm

你可能感兴趣的:(知识图谱)