连接
一旦你安装了驱动程序并拥有正在运行的 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_read
或execute_write
调用执行的回调。如果服务器发生故障,驱动程序会自动重新执行回调。 - 驱动程序
-
一个
Driver
对象包含建立与 Neo4j 数据库连接所需的详细信息。