Neo4j+python学习
环境准备
Java Archive Downloads - Java SE 11 | Oracle 中国
Neo4j Download Center - Graph Database & Analytics
注册 Neo4j 服务 neo4j install-service 启动 Neo4j 服务 neo4j start
默认用户名,密码neo4j neo4j
修改配置文件
找到neo4j-community-3.3.5\conf\neo4j.conf 文件,修改 #dbms.connector.http.listen_address=:7474 为 dbms.connector.http.listen_address=0.0.0.0:7474 远程bolt连接: #dbms.connector.bolt.listen_address=:7687 改为: dbms.connector.bolt.listen_address=0.0.0.0:7687 Defender 防火墙 要开启防火墙,配置入站规则。 允许7474,7687端口可被访问
下载neo4j的python驱动
py2neo安装出问题,而且21年之后不再支持。 建议使用官方接口neo4j deriver conda activate au #python -m pip install neo4j 这样默认最新的版本4.4.0(但是最新的是5.19) python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple –upgrade pip 换源更新 python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade neo4j
使用
驱动连接
def test(): uri = "bolt://192.168.253.1:7687" user = "neo4j" password = "123" driver= GraphDatabase.driver(uri, auth=(user, password)) with driver.session() as session: session.write_transaction(func, param)
主要有以下几个数据类:
Driver
Neo4j 的主要接入点.
一个driver连接维护 Neo4j.session对象使用连接的一个连接池
主要方法:
execute_query()
在事务函数中执行查询并返回所有结果。
此方法是较低级别驱动程序 API 的方便包装器

session(**config)
创建一个会话,返回neo4j.session对象
verify_connectivity()
验证连接。
Sessions
所有数据库活动都通过两种机制进行协调:会话(neo4j.会话)和事务(neo4j.事务)
会话是任意数量的因果关系相关的事务性工作单元的逻辑容器。会话会自动保证群集环境中的因果一致性,但如果需要,也可以对多个会话进行因果链接。会话为数据库活动提供最高级别的遏制。会话创建是一个轻量级操作,会话不是线程安全的。
连接是从 neo4j 绘制的。根据需要提供驱动进程连接池。
事务是一个工作单元,它要幺完整提交,要幺在失败时回滚。
read_transaction(transaction_function, *args, **kwargs)
Deprecated since version 5.0: Method was renamed to execute_read().
execute_read(transaction_function, *args, **kwargs)
在托管读取事务中执行工作单元。
当函数返回时,将自动提交此事务,除非在查询执行期间或用户代码引发异常。
execute_write(transaction_function, *args, **kwargs)

Transaction
有三种事务处理方式
Auto-commit transactions:自动提交事务是最简单的事务形式,通过 neo4j.Session.run() 方法可以实现。
这种方式简单易用,但每个事务只支持一条语句,并且在失败时不会自动重试。这种方式通常用于执行单一的操作,如插入、更新或删除单个节点或关系。 Explicit transactions:显式事务支持多条语句,需要通过显式调用 neo4j.Session.begin_transaction() 方法创建。
这会创建一个新的 neo4j.Transaction 对象,用于执行多个 Cypher 语句。通过显式事务,应用程序可以更精确地控制事务的边界和范围,确保一系列操作要么全部成功提交,要么全部回滚。 Transaction functions:事务函数是最强大的事务形式,提供了访问模式覆盖和重试能力。
neo4j.Session.execute_write() 和 neo4j.Session.execute_read() 方法允许将表示事务性工作单元的函数对象作为参数传递。这个函数会在可配置的时间限制内被调用一次或多次,直到成功为止。
举例
def create_node(tx, name): tx.run("CREATE (n:Person {name: $name})", name=name) with driver.session() as session: session.run("CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE") session.run("DELETE (n) MATCH (n:Person)") # 使用自动提交事务创建节点 session.run("CREATE (n:Person {name: 'Alice'})") # 使用显式事务创建节点 with session.begin_transaction() as tx: create_node(tx, "Bob") # 使用事务函数创建节点 def create_node_transaction(tx): create_node(tx, "Charlie") session.write_transaction(create_node_transaction)
Result
每次查询返回一个结果
在 Neo4j Python 驱动程序中,neo4j.Result 对象代表一个 Cypher 查询的结果集。下面是 neo4j.Result 对象常用的属性和方法: 属性: keys:返回查询结果中的列名列表。 方法: consume():消费结果并返回结果的元数据,包括列名等信息。 peek():查看结果集中的下一个记录,但不移动指针。 single():获取结果集中的下一个记录,并将指针移动到下一行。 next():获取结果集中的下一个记录,并将指针移动到下一行,与 single() 方法相同。 value(index_or_key):根据列索引或列名获取当前记录中指定列的值。 values():返回当前记录中所有列的值组成的列表。 records():返回一个迭代器,用于迭代结果集中的所有记录。 keys():返回查询结果中的列名列表,与 keys 属性相同。 这些方法和属性可用于检索和处理查询结果中的数据。例如,可以使用 single() 方法逐行处理查询结果,或使用 value() 方法根据列索引或列名检索特定列的值。

Result操作
neo4j._sync.work.result.Result 对象
.single(): 如果查询结果只有一行,返回该行的数据,否则返回 None。 if re.single() is None:
.data(): 返回一个包含所有行数据的列表,每行数据以字典的形式表示。 if not re.data():
.value(): 返回单个结果值,通常用于处理聚合查询或者返回单个值的查询。 if re.value() is None:
.graph(): 返回查询结果的图形表示,包括节点和边。 graph = result.graph() if len(graph.nodes) == 0 and len(graph.relationships) == 0:
.consume(): 在事务中执行多个查询时,清除并忽略结果。
Record对象
Record 对象的数据结构如下:
- 它是一个不可变的有序集合,类似于元组(tuple),因此可以通过索引访问其中的元素。
- 它还是一个映射(mapping),因此可以通过键值对的方式来访问其中的元素。
例子:
<Record n=<Node element_....>>
record[0] && record[‘n’]都可以读取record的对应字段的值。
Node对象
< Node element_id = '15'
Labels = frozenset({'label'})
Properties = {'node': '5127935',}
>
node.keys()返回节点的属性的 键列表
node.labels, 获取标签
node.element_id 获取ID

浙公网安备 33010602011771号