跳至内容

配置

有两种主要方法可以配置 Prisma Client Python

  1. 通过项目 pyproject.toml 文件中的 [tool.prisma] 部分

    用于任何需要在生成之前发生的配置,例如更改 二进制文件的位置

  2. 通过 schema.prisma 文件中的 generator

    用于任何直接应用于生成代码的配置,例如生成 同步或异步 客户端。

生成器选项

选项通过 schema.prisma 文件中的 generator 块传递给 Prisma Client Python

例如

generator db {
  provider = "prisma-client-py"
  config_option = "value"
}
有关不特定于 Prisma Client Python 的选项,请参阅 官方文档

接口

有关更多信息,请参阅 设置

此选项配置您将用于与客户端交互的方法。

有效值为

  • asyncio
  • sync

如果使用 asyncio,则生成的客户端将是异步的,并且代码必须使用 asyncio 运行,例如

user = await db.user.find_unique(where={'id': 'user_id'})

如果使用 sync,则生成的客户端将是同步的,例如

user = db.user.find_unique(where={'id': 'user_id'})

部分类型生成器

可以与 prisma 客户端一起生成自定义部分模型,请参阅 部分类型 以了解如何使用部分类型。

生成部分类型的脚本可以使用 partial_type_generator 选项配置,该选项默认为 prisma/partial_types.py

您可以传递绝对模块导入或路径。

警告

传递模块也会导入任何父包,例如,给定 foo.bar.partialsfoobar 也会被导入

示例

generator db {
  provider = "prisma-client-py"
  partial_type_generator = "scripts/partial_types.py"
}
generator db {
  provider = "prisma-client-py"
  partial_type_generator = "scripts.partial_types"
}

递归类型深度

警告

增加生成的类型数量会成倍地增加静态类型检查器所用时间和资源。

由于某些 Python 静态类型检查器不支持递归类型,因此 Prisma Client Python 可以将递归类型和伪递归类型生成到任意深度。

此深度可以使用 recursive_type_depth 选项控制,如果给出 -1,则将生成递归类型,如果给出大于或等于 2 的值,则将生成到给定深度的伪递归类型。

示例

这些示例使用以下 schema.prisma 模型

model Post {
  id         String     @id @default(cuid())
  title      String
  author     User?      @relation(fields: [author_id], references: [id])
  author_id  String?
  categories Category[]
}

model User {
  id      String   @id @default(cuid())
  name    String
  posts   Post[]
  profile Profile?
}

model Category {
  id    Int    @id @default(autoincrement())
  posts Post[]
  name  String
}

model Profile {
  id      Int    @id @default(autoincrement())
  user    User   @relation(fields: [user_id], references: [id])
  user_id String @unique
  bio     String
}
默认

此选项的默认值为 5。这允许递归类型达到以下深度。

user = await db.user.find_unique(
    where={'id': user_id},
    include={
        'profile': True,
        'posts': {
            'include': {
                'categories': {
                    'include': {
                        'posts': True
                    }
                }
            }
        },
    },
)
递归

如果您使用的是支持递归类型的类型检查器,例如 pyright,您可以生成完全递归的类型,这意味着没有深度限制。

您可以通过将 recursive_type_depth 设置为 -1 来实现。

generator db {
  provider = "prisma-client-py"
  recursive_type_depth = -1
}
最小值

生成大量类型会显著降低静态类型检查器的速度,为了缓解这种情况,可以将生成的类型数量减少到大于 1 的任何数量。

generator db {
  provider = "prisma-client-py"
  recursive_type_depth = 2
}

递归类型现在仅在以下深度内有效。

user = await db.user.find_unique(
    where={'id': user_id},
    include={
        'profile': True,
        'posts': True,
    },
)
增加

警告

增加生成的类型数量会成倍地增加静态类型检查器所用时间和资源。

没有最大值,递归类型可以任意深度嵌套。

generator db {
  provider = "prisma-client-py"
  recursive_type_depth = 8
}

递归类型现在仅在以下深度内有效。

user = await db.user.find_unique(
    where={'id': user_id},
    include={
        'profile': True,
        'posts': {
            'include': {
                'categories': {
                    'include': {
                        'posts': {
                            'include': {
                                'categories': True
                            }
                        }
                    }
                }
            }
        },
    },
)

配置选项

选项可以通过以下两种方式传递给 Prisma Client Python:通过项目的 pyproject.toml 文件中的 tool.prisma 键,例如

[tool.prisma]
# cache engine binaries in a directory relative to your project
binary_cache_dir = '.binaries'

或者通过环境变量,例如 PRISMA_BINARY_CACHE_DIR。如果使用这两种方法设置了相同的选项,则环境变量将优先。

二进制缓存目录

此选项控制 Prisma Engine 和 Prisma CLI 二进制文件应下载到的位置。默认情况下,它会下载到包含当前 Prisma Engine 版本的缓存目录。

选项 环境变量 默认
binary_cache_dir PRISMA_BINARY_CACHE_DIR /{home}/.cache/prisma-python/binaries/{prisma_version}/{engine_version}

主目录

此选项可用于更改 binary_cache_dir 选项的基目录,而无需担心 Prisma 二进制文件的版本控制。如果您需要将二进制文件下载到本地目录,这将很有用。

选项 环境变量 默认
home_dir PRISMA_HOME_DIR ~

Prisma 版本

此选项控制要使用的 Prisma 版本。需要注意的是,这旨在用于内部,并且仅保证支持固定版本的 Prisma。

选项 环境变量 默认
prisma_version PRISMA_VERSION 5.11.0

预期引擎版本

这是一个内部选项,作为 prisma_version 选项的保障措施。如果您修改了 prisma_version 选项,则还必须更新此选项以使用相应的引擎版本。您可以在 此处 找到引擎版本的列表。

选项 环境变量 默认
expected_engine_version PRISMA_EXPECTED_ENGINE_VERSION efd2449663b3d73d637ea1fd226bafbcf45b3102

二进制平台

如果您需要使用 binaryTargets 模式选项在一个平台上构建应用程序并在另一个平台上部署应用程序,则此选项很有用。

这允许您动态设置当前平台,因为 Prisma Client Python 不正式支持 binaryTargets,尽管我们有一些安全措施来尝试使用正确的二进制文件,但它尚未经过全面测试。

可以在 此处 找到有效选项的列表。

选项 环境变量
binary_platform PRISMA_BINARY_PLATFORM

使用全局 Node

此选项配置 Prisma Client Python 是否尝试使用全局安装的 Node 版本(如果可用)来运行 Prisma CLI。

选项 环境变量 默认
use_global_node PRISMA_USE_GLOBAL_NODE True

使用 nodejs-bin

此选项配置 Prisma Client Python 是否尝试使用安装的 nodejs-bin 包版本(如果可用)来运行 Prisma CLI。

选项 环境变量 默认
use_nodejs_bin PRISMA_USE_NODEJS_BIN True

额外的 Nodeenv 参数

此选项允许您向 nodeenv 传递额外的参数,我们使用该包自动下载 Node 二进制文件以运行 CLI。

参数在路径之后传递,例如

python -m nodeenv <path> <extra args>
选项 环境变量
nodeenv_extra_args PRISMA_NODEENV_EXTRA_ARGS

Nodeenv 缓存目录

此选项配置 Prisma Client Python 将 Node 二进制文件存储在何处,该二进制文件由 nodeenv 安装。

请注意,这不会使用 主目录 选项,而是使用实际的用户主目录。

选项 环境变量 默认
nodeenv_cache_dir PRISMA_NODEENV_CACHE_DIR ~/.cache/prisma-python/nodeenv/