使用 Neo4j 和 Python 构建应用程序

Neo4j Python 驱动程序是用于通过 Python 应用程序与 Neo4j 实例交互的官方库。

Neo4j 的核心是 Cypher,这是与 Neo4j 数据库交互的查询语言。虽然本指南不要求您是经验丰富的 Cypher 查询者,但如果您已经了解一些 Cypher,则更容易专注于 Python 特定的部分。因此,尽管本指南也提供 Cypher 的温和介绍,但如果这是您第一次接触图数据库建模和查询,请考虑查看入门 → Cypher以获取更详细的演练。然后,您可以在遵循本指南开发 Python 应用程序时应用这些知识。

安装

使用 pip 安装 Neo4j Python 驱动程序

pip install neo4j

连接到数据库

通过创建 Driver 对象并提供 URL 和身份验证令牌来连接到数据库。获得 Driver 实例后,使用 .verify_connectivity() 方法确保可以建立正常工作的连接。

from neo4j import GraphDatabase

# URI examples: "neo4j://localhost", "neo4j+s://xxx.databases.neo4j.io"
URI = "{neo4j-database-uri}"
AUTH = ("{neo4j-username}", "{neo4j-password}")

with GraphDatabase.driver(URI, auth=AUTH) as driver:
    driver.verify_connectivity()

创建示例图

使用 Driver.execute_query() 方法运行 Cypher 查询。不要硬编码或连接参数:使用占位符并将参数指定为关键字参数。

创建两个 Person 节点和它们之间的 KNOWS 关系
summary = driver.execute_query("""
    CREATE (a:Person {name: $name})
    CREATE (b:Person {name: $friendName})
    CREATE (a)-[:KNOWS]->(b)
    """,
    name="Alice", friendName="David",
    database_="neo4j",
).summary
print("Created {nodes_created} nodes in {time} ms.".format(
    nodes_created=summary.counters.nodes_created,
    time=summary.result_available_after
))

查询图

要从数据库中检索信息,请使用 Cypher 子句 MATCH

检索所有喜欢其他 Person 节点的 Person 节点
records, summary, keys = driver.execute_query("""
    MATCH (p:Person)-[:KNOWS]->(:Person)
    RETURN p.name AS name
    """,
    database_="neo4j",
)

# Loop through results and do something with them
for record in records:
    print(record.data())  # obtain record as dict

# Summary information
print("The query `{query}` returned {records_count} records in {time} ms.".format(
    query=summary.query, records_count=len(records),
    time=summary.result_available_after
))

关闭连接和会话

除非您使用 with 语句创建它们,否则请对所有 DriverSession 实例调用 .close() 方法,以释放它们仍持有的任何资源。

from neo4j import GraphDatabase


driver = GraphDatabase.driver(URI, auth=AUTH)
session = driver.session(database="neo4j")

# session/driver usage

session.close()
driver.close()

词汇表

LTS

长期支持版本是保证支持数年的版本。Neo4j 4.4 是 LTS,Neo4j 5 也将有一个 LTS 版本。

Aura

Aura 是 Neo4j 的全托管云服务。它提供免费和付费计划。

Cypher

Cypher 是 Neo4j 的图查询语言,它允许您从数据库中检索数据。它类似于 SQL,但适用于图。

APOC

Awesome Procedures On Cypher (APOC) 是一个(许多)函数库,这些函数本身不易用 Cypher 表达。

Bolt

Bolt 是 Neo4j 实例和驱动程序之间交互所使用的协议。它默认监听端口 7687。

ACID

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)(ACID) 是保证数据库事务可靠处理的属性。符合 ACID 的 DBMS 确保数据库中的数据在发生故障时仍保持准确和一致。

最终一致性

如果数据库保证所有集群成员在某个时间点将存储最新版本的数据,则该数据库是最终一致的。

因果一致性

如果读写查询在集群的每个成员中以相同的顺序被看到,则数据库是因果一致的。这比最终一致性更强。

NULL

空标记不是一种类型,而是值缺失的占位符。有关更多信息,请参阅Cypher → 使用 null

事务

事务是一个工作单元,它要么整体提交,要么在失败时回滚。一个例子是银行转账:它涉及多个步骤,但它们必须全部成功或被还原,以避免资金从一个账户中扣除但未添加到另一个账户。

反压

反压是阻碍数据流动的力。它确保客户端不会被超出其处理速度的数据淹没。

事务函数

事务函数是 execute_readexecute_write 调用执行的回调。在服务器故障的情况下,驱动程序会自动重新执行该回调。

驱动程序

一个 Driver 对象保存建立与 Neo4j 数据库连接所需的详细信息。

© . All rights reserved.