入门
安装

安装

Prisma Client Rust 的安装方式与大多数 Rust 项目不同。

prisma-client-rust 包含查询构建器、特征和类型定义。其中一些 - 例如 Direction - 可以在您自己的代码中使用。

prisma-client-rust-cli 包含 Prisma 生成器和对 Prisma CLI 的访问,但没有提供可执行二进制文件 - 这必须由您自己创建。

Prisma Client Rust 需要最低 Rust 版本 v1.62.0。

创建 CLI 二进制文件

在您的板条箱内部

首先,主库和 CLI 包必须添加到您项目的 Cargo.toml 中

[dependencies]
prisma-client-rust = { git = "https://github.com/Brendonovich/prisma-client-rust", tag = "0.6.11" }
prisma-client-rust-cli = { git = "https://github.com/Brendonovich/prisma-client-rust", tag = "0.6.11" }

生成的客户端将需要 serde,因此运行 cargo add 来安装它

cargo add serde

您还需要确保您使用的是 Rust 的 2021 版。

[package]
# ... package stuff
edition = "2021"

创建二进制文件以访问 CLI 的最简单方法是,如果您还没有,创建一个 src/bin 文件夹,并在其中创建一个名为 prisma.rs 的文件(这将确定您的二进制文件名称)。在此文件中放入以下内容

fn main() {
    prisma_client_rust_cli::run();
}

从技术上讲,这就是所需的全部!只需运行以下命令即可访问 CLI

$ cargo run --bin <prisma binary name> -- <command>

如果使用 Apple Silicon,建议确保已安装 Rosetta,**即使您之前已安装过**。运行 softwareupdate --install-rosetta --agree-to-license 来安装它。否则可能会导致 Prisma 的 query-engine 二进制文件出现难以描述的错误。

但这并不是一个非常友好的命令。幸运的是,Cargo 允许我们为运行命令定义项目范围的别名!在项目的根目录下创建一个名为 .cargo 的文件夹,并在其中创建一个名为 config.toml 的文件,其中包含以下内容

[alias]
prisma = "run --bin <prisma binary name> --"

现在,您可以在项目的任何位置运行 cargo prisma <command> 来访问 CLI!

但是,这种方法存在一些问题

  1. prisma-client-rust-cli 作为板条箱中的依赖项包含在内,这可能是不希望的。
  2. 如果您的板条箱在编译期间出现错误,则您将无法生成客户端,因为 CLI 也会无法编译!

谢天谢地,有一种更可靠的方法

作为工作区板条箱

将 CLI 二进制文件移动到一个单独的板条箱,并配置您的项目以使用 Cargo 工作区 (在新标签页中打开)。以下是一个示例项目结构,其中在 src/main.rs 中有一个二进制目标,以及一个名为 prisma-cli 的单独 CLI 板条箱,该板条箱包含在 Cargo.toml 的工作区成员中。

Cargo.toml
.cargo/
    config.toml
src/
    main.rs
prisma-cli/
    Cargo.toml
    src/
        main.rs

对于上面的示例,Cargo.toml 将包含 prisma-client-rust 作为依赖项,因为它是由生成的文件所需的,而 prisma-cli/Cargo.toml 将包含 prisma-client-rust-cli 作为依赖项,因此 src/main.rs 中的二进制文件不会与所有 CLI 代码捆绑在一起,而只会与所需的库代码捆绑在一起。

您还需要更新 cargo prisma 别名以运行新的板条箱

[alias]
prisma = "run -p <prisma crate name> --"

关于虚拟工作区的说明

如果工作区的根 Cargo.toml 没有 [package] 部分(只有 [workspace] 部分),那么您正在使用虚拟工作区。

为了使 Prisma Client Rust 正确编译,您需要指示 Cargo 使用版本 2 的 功能解析器 (在新标签页中打开)

[workspace]
# ... workspace stuff
resolver = "2"

对于常规工作区和单个包来说,这没有必要,因为它们可以使用edition = "2021",但虚拟工作区由于某些原因比较特殊。

指定您的数据库

从 0.6.3 版本开始,Prisma Client Rust 允许您精确指定项目使用的数据库连接器,以避免编译 Prisma 支持的其他连接器。这减少了编译时间和二进制文件大小。

首先,为 prisma-client-rustprisma-client-rust-cli 都设置 default-features = false。然后,将您想要支持的每个数据库作为这两个板条箱的功能添加。可能的值为 postgresqlmysqlsqlitemssqlmongodb

为什么不提供 CLI 二进制文件?

在旧版本的 Prisma Client Rust 中,可以 cargo install prisma-client-rust-cli 并全局安装 CLI 以随时使用。但这存在一个主要问题:版本控制。管理使用不同版本的 Prisma Client Rust 的多个项目很快就会变得非常烦人,而且违反了 Prisma Client 的推荐安装说明 JS (在新标签页中打开)Go (在新标签页中打开)Python (在新标签页中打开)

与这三种语言不同,Rust(或更具体地说 Cargo)不提供执行依赖项中可用二进制文件的方法。由于排除了全局安装二进制文件,因此将 CLI 作为库提供被视为唯一其他选项,而且我个人认为能够运行 cargo prisma <command> 是一种非常好的体验,并且与其他语言的客户端相匹配。