连接

一旦你安装了驱动程序并拥有正在运行的 Neo4j 实例,你就可以准备将你的应用程序连接到数据库了。

连接到数据库

通过创建 Driver 对象并提供 URL 和身份验证令牌来连接到数据库。

from neo4j import GraphDatabase

# URI examples: "neo4j://localhost", "neo4j+s://xxx.databases.neo4j.io"
URI = "<URI for Neo4j database>"
AUTH = ("<Username>", "<Password>")

with GraphDatabase.driver(URI, auth=AUTH) as driver: (1)
    driver.verify_connectivity() (2)
    print("Connection established.")
1 创建 Driver 实例仅提供有关如何访问数据库的信息,但实际上并没有建立连接。连接被推迟到执行第一个查询时。
2 要立即验证驱动程序是否可以连接到数据库(有效凭据、兼容版本等),请在初始化驱动程序后使用 .verify_connectivity() 方法。

Driver 对象的创建和连接验证都可能引发许多不同的异常。由于错误处理可能会变得非常冗长,并且连接错误是任何后续任务的阻止因素,因此最常见的选择是在连接期间发生异常时让程序崩溃。

Driver 对象是不可变的、线程安全的且创建成本高昂,因此您的应用程序应该只创建一个实例并将其传递(您可以在线程之间共享 Driver 实例)。如果您需要通过多个不同的用户查询数据库,请使用模拟,而无需创建新的 Driver 实例。如果您想更改 Driver 配置,则需要创建一个新对象。

连接到 Aura 实例

当您创建一个Aura 实例时,您可以下载一个文本文件(一个所谓的Dotenv 文件),其中包含以环境变量形式连接到数据库的信息。该文件的文件名格式为 Neo4j-a0a2fa1d-Created-2023-11-06.txt

您可以手动从该文件中提取 URI 和凭据,也可以使用第三方模块来加载它们。我们建议使用 python-dotenv 包来实现此目的。

import dotenv
import os
from neo4j import GraphDatabase

load_status = dotenv.load_dotenv("Neo4j-a0a2fa1d-Created-2023-11-06.txt")
if load_status is False:
    raise RuntimeError('Environment variables not loaded.')

URI = os.getenv("NEO4J_URI")
AUTH = (os.getenv("NEO4J_USERNAME"), os.getenv("NEO4J_PASSWORD"))

with GraphDatabase.driver(URI, auth=AUTH) as driver:
    driver.verify_connectivity()
    print("Connection established.")
从概念上讲,Aura 实例与任何其他 Neo4j 实例没有区别,因为 Aura 只是 Neo4j 的一种部署模式。当通过驱动程序与 Neo4j 数据库交互时,它正在使用的是 Aura 实例还是其他部署方式都没有区别。

关闭连接

始终关闭 Driver 对象以释放所有分配的资源,即使在连接失败或运行时错误时也是如此。可以使用 with 语句实例化 Driver 对象,或者显式调用 Driver.close() 方法。

其他连接参数

有关更多 Driver 配置参数和其他连接设置,请参阅高级连接信息

术语表

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

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

最终一致性

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

因果一致性

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

NULL

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

事务

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

背压

背压是反对数据流动的力。它确保客户端不会被超出其处理能力的数据淹没。

事务函数

事务函数是由 execute_readexecute_write 调用执行的回调。如果服务器发生故障,驱动程序会自动重新执行回调。

驱动程序

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