49 次发布

0.8.0 2024 年 8 月 7 日
0.7.3 2024 年 7 月 31 日
0.7.1 2023 年 12 月 28 日
0.7.0-rc.3 2023 年 11 月 25 日
0.1.0 2020 年 10 月 22 日

#44数据库接口

Download history 940/week @ 2024-05-03 1505/week @ 2024-05-10 1130/week @ 2024-05-17 1136/week @ 2024-05-24 1757/week @ 2024-05-31 1053/week @ 2024-06-07 745/week @ 2024-06-14 1158/week @ 2024-06-21 922/week @ 2024-06-28 1255/week @ 2024-07-05 1064/week @ 2024-07-12 1181/week @ 2024-07-19 818/week @ 2024-07-26 1231/week @ 2024-08-02 969/week @ 2024-08-09 1376/week @ 2024-08-16

4,564 每月下载量
用于 15 个 Crates(12 个直接使用)

MIT 许可证

455KB
12K SLoC

Neo4rs CI 状态 Crates.io

neo4rs 是 Neo4j 图数据库的驱动程序,使用 Rust 编写。

neo4rs 实现了 bolt 规范

此驱动程序与 Neo4j 版本 5.x 和 4.4 兼容。仅支持最新的 5.x 版本,遵循 Neo4j 版本支持策略

API 文档: Docs.rs

示例

    // concurrent queries
    let uri = "127.0.0.1:7687";
    let user = "neo4j";
    let pass = "neo";
    let graph = Graph::new(&uri, user, pass).await.unwrap();
    for _ in 1..=42 {
        let graph = graph.clone();
        tokio::spawn(async move {
            let mut result = graph.execute(
           query("MATCH (p:Person {name: $name}) RETURN p").param("name", "Mark")
        ).await.unwrap();
            while let Ok(Some(row)) = result.next().await {
            let node: Node = row.get("p").unwrap();
            let name: String = node.get("name").unwrap();
                println!("{}", name);
            }
        });
    }

    //Transactions
    let mut txn = graph.start_txn().await.unwrap();
    txn.run_queries([
        "CREATE (p:Person {name: 'mark'})",
        "CREATE (p:Person {name: 'jake'})",
        "CREATE (p:Person {name: 'luke'})",
    ])
    .await
    .unwrap();
    txn.commit().await.unwrap(); //or txn.rollback().await.unwrap();

MSRV

此包具有最低支持的 Rust 版本(MSRV)为 1.63.0

MSRV 的更改 被视为破坏性更改。对于 1.0.0 之后的版本,可以在次要版本增量(1.1.3 -> 1.2.0)中进行 MSRV 的更改;对于 1.0.0 之前的版本,可以在补丁版本增量(0.1.3 -> 0.1.4)中进行 MSRV 的更改。

开发

测试

该包包含单元测试和集成测试。单元测试使用cargo test --lib运行,无需运行Neo4j实例。集成测试使用cargo test运行,需要运行中的Neo4j实例。

运行集成测试

要运行测试,您需要运行docker或现有的Neo4j实例。由于测试可能不会自动清理,推荐使用docker。

使用Docker

要使用docker运行测试,您需要已安装并运行docker。您可以通过设置NEO4J_VERSION_TAG环境变量来控制使用的Neo4j版本。默认版本是4.2。测试将使用官方的neo4j docker镜像,版本作为标签。

您可能会遇到“无法启动容器”的恐慌或测试失败。在这种情况下,在运行测试之前,尝试先使用docker pull neo4j:$NEO4J_VERSION_TAG拉取镜像。

这可能发生在您的机器架构不支持该镜像的情况下,例如arm64架构的苹果硅Mac。在这种情况下,拉取镜像将失败,并显示类似“no matching manifest for linux/arm64/v8”的消息。您需要使用--platform标志拉取不同架构的镜像,例如docker pull --platform linux/amd64 neo4j:$NEO4J_VERSION_TAG。docker中有一个实验性选项可以使用Rosetta运行这些镜像,这样测试就不需要花费很长时间(请检查docker文档)。

您也可以使用较新的neo4j版本,如4.4,它支持arm64架构。

使用现有的Neo4j实例

要使用现有的Neo4j实例运行测试,您需要将NEO4J_TEST_URI环境变量设置为连接字符串,例如neo4j+s://42421337thisisnotarealinstance.databases.neo4j.io。默认用户是neo4j,但可以使用NEO4J_TEST_USER环境变量进行更改。默认密码是neo,但可以使用NEO4J_TEST_PASS环境变量进行更改。

一些测试可能根据Neo4j版本运行不同的查询。您可以使用NEO4J_VERSION_TAG环境变量设置Neo4j实例的版本。

建议只运行单个集成测试,并在测试后手动清理数据库。

env NEO4J_TEST_URI=neo4j+s://42421337thisisnotarealinstance.databases.neo4j.io NEO4J_TEST_USER=neo4j NEO4J_TEST_PASS=supersecret NEO4J_VERSION_TAG=5.8 cargo test --test <name of the integration test, see the file names in lib/tests/>

更新CI的Cargo.lock文件

我们有一些CI测试,用于验证MSRV以及依赖项的最小版本。最小版本是满足Cargo.toml条目的最低版本,而不是默认的最高版本。

如果您更改了Cargo.toml中的任何内容,您需要更新CI的Cargo.lock文件。

该项目使用xtask来帮助更新锁文件。

建议在运行以下命令之前关闭所有编辑器,或者更具体地说,关闭此项目的所有 rust-analyzer 实例。

更新 ci/Cargo.lock.msrv

# If there are errors, update Cargo.toml to fix and try again from the top.
# You might have to downgrade or remove certain crates to hit the MSRV.
# A number of such downgrades are already defined in the `update_msrv_lock` function
# in the xtask script.
# Alternatively, you might suggest an increase of the MSRV.
cargo xtask msrv

使用 xtask 需要系统上已安装 curljq

更新 ci/Cargo.lock.min

# If there are errors, update Cargo.toml to fix and try again from the top.
cargo xtask min

使用 xtask 需要系统上已安装 curljq

许可协议

Neo4rs 可以根据您的选择以下任一许可协议进行许可

依赖项

~15–25MB
~463K SLoC