Neo4j-事务操作
事务操作的本质就是ACID, 事务要么全是或者全否(原子性), 事务只能提交有效数据(一致性),当前事务操作的数据不允许被其他事务操作(隔离性),事务结束之前,任何数据都不会改变消失,只有事务结束了,数据才发生改变(持久性)。
数据库的操作是从开始连接-增删改查-关闭-事务这样一种顺序进行学习的,neo4j官方库的基础提供execute_query进行query查询的,这里面neo4j自动给没一个execute_query创建了一个事务,现在neo4j提供一个自己管理事务的操作session。
session官方的说法就是提供一个query的通道。query的执行放在一个函数内。也就是说session拥有回退撤销,加锁等功能。
from neo4j import GraphDatabase
url = "neo4j://localhost"
auth = ('neo4j', '123456')
# 定义一个使用session执行query的函数
def handle_query(session, query, query_args):
result = session.run(query, query_args)
return list(result)
# 利用session.execute_read/execute_write函数调用上面的函数,并将出session意外的参数传进去。
with GraphDatabase.driver(uri=url, auth=auth) as driver:
with driver.session(database='neo4j') as session:
query = "match (p:Person) where p.name starts with $filter return p.name as name order by name"
parameters = {'filter':'Ali'}
people = session.execute_read(handle_query, query, parameters)
for person in people:
print(person.data())