Py2neo v4使用笔记(六)

这篇笔记还是接着谈Graph,但是引入一个新的类Transaction。

Graph表示的是Neo4j中的图数据库,Transaction则是对Graph进行一系列操作的Cypher语句的容器。

跨专业不恰当类比一下,Graph就好比表示年终状态的资产负债表,是某个时间点的状态,是静态的;Transaction就是期间进行的一系列操作,比如现金流量、所有者权益变动,是动态操作。

所以,Transaction是对Graph的一系列操作的集合,Graph的很多操作也就是transaction的操作,例如以下这些:

graph.begin(autocommit=False) #开始一个新的transaction,默认是不自动执行的(操作先暂存在transaction里),如果autocommit=True则自动执行

graph.create(subgraph)

graph.delete(subgraph) #该语句自动执行

graph.separate(subgraph) #删除子图中的关系

graph.evaluate(“cypher语句”)#返回第一条记录的第一个值,自动执行

graph.exists(subgraph) #判断子图是否存在,自动执行

graph.merge(subgraph, primary_label=None, primary_key=None) #这个merge和cypher的merge有所区别,它首先是在Neo4j中寻找匹配的远程node,如果没有就创建节点,如果有就更新节点;然后是匹配关系,同样创建或更新

graph.run(“cypher语句”)#自动执行cypher语句

相应地,Transaction类中也就有create() delete() separate() evaluate() exists() merge() run()这些方法,以及之前提到的pull() push()方法,不过它们都不是自动执行的,而是将操作先暂存在transaction中,然后用transaction.commit()执行

此外,transcation还有以下方法

transaction.finished() #判断transaction是否执行完成

transaction.rollback() #回滚,撤销当前transaction的所有操作

graph也还有一些和transaction无关的“静态”操作,例如

graph.match()

graph.nodes

graph.relationships

这里v4的查找节点的函数和v3不一样了,代码示例如下:

graph = Graph()

matcher = NodeMatcher(graph)

matcher.match("Person", name="Alice").first()

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容