> ## Documentation Index
> Fetch the complete documentation index at: https://bun.ll1025.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 使用 Prisma 与 Bun

<Note>
  Prisma 的动态子命令加载需要 npm 与 Bun 一起安装。这会影响 CLI 命令，如 `prisma init` 和 `prisma migrate`。生成的代码使用 `prisma-client` 生成器与 Bun 一起工作。
</Note>

<Steps>
  <Step title="创建新项目">
    创建一个目录并使用 `bun init` 初始化。

    ```bash terminal icon="terminal" theme={null}
    mkdir prisma-app
    cd prisma-app
    bun init
    ```
  </Step>

  <Step title="安装 Prisma 依赖">
    然后安装 Prisma CLI（`prisma`）、Prisma Client（`@prisma/client`）和 LibSQL 适配器作为依赖。

    ```bash terminal icon="terminal" theme={null}
    bun add -d prisma
    bun add @prisma/client @prisma/adapter-libsql
    ```
  </Step>

  <Step title="使用 SQLite 初始化 Prisma">
    使用 `bunx` 运行 Prisma CLI 来初始化模式和迁移目录。本指南使用内存中的 SQLite 数据库。

    ```bash terminal icon="terminal" theme={null}
    bunx --bun prisma init --datasource-provider sqlite
    ```

    这会创建一个基础模式。打开 `prisma/schema.prisma`，将 generator 块更新为使用带 `bun` 运行时的无 Rust 客户端，并添加一个 `User` 模型。

    ```prisma prisma/schema.prisma icon="https://mintcdn.com/span-inc/82N53aP7NFbaCVSl/icons/ecosystem/prisma.svg?fit=max&auto=format&n=82N53aP7NFbaCVSl&q=85&s=28e21d4d78cff215328895cecd8c98b3" theme={null}
      generator client {
        provider = "prisma-client" // [!code ++]
        output = "./generated" // [!code ++]
        engineType = "client" // [!code ++]
        runtime = "bun" // [!code ++]
      }

      datasource db {
        provider = "sqlite"
        url      = env("DATABASE_URL")
      }

      model User { // [!code ++]
        id    Int     @id @default(autoincrement()) // [!code ++]
        email String  @unique // [!code ++]
        name  String? // [!code ++]
      } // [!code ++]
    ```
  </Step>

  <Step title="创建并运行数据库迁移">
    生成并运行初始迁移。这会将一个 `.sql` 迁移文件写入 `prisma/migrations`，创建一个新的 SQLite 数据库，并对其运行迁移。

    ```bash terminal icon="terminal" theme={null}
     bunx --bun prisma migrate dev --name init
    ```

    ```txt theme={null}
    环境变量已从 .env 加载
    已从 prisma/schema.prisma 加载 Prisma 模式
    数据源 "db"：SQLite 数据库 "dev.db" 位于 "file:./dev.db"

    SQLite 数据库 dev.db 已在 file:./dev.db 创建

    正在应用迁移 `20251014141233_init`

    以下迁移已根据新的模式更改创建并应用：

    prisma/migrations/
     └─ 20251014141233_init/
       └─ migration.sql

    你的数据库现已与模式同步。

    ✔ 已生成 Prisma Client (6.17.1) 到 ./generated，用时 18ms
    ```
  </Step>

  <Step title="生成 Prisma Client">
    如输出所示，Prisma 会在你运行新的迁移时重新生成 *Prisma client*。客户端提供了用于读写数据库的完全类型化 API。你也可以使用 Prisma CLI 手动重新生成。

    ```sh terminal icon="terminal" theme={null}
    bunx --bun prisma generate
    ```
  </Step>

  <Step title="使用 LibSQL 初始化 Prisma Client">
    创建一个新文件 `prisma/db.ts`，使用 LibSQL 适配器初始化 PrismaClient。

    ```ts prisma/db.ts icon="https://mintcdn.com/span-inc/82N53aP7NFbaCVSl/icons/typescript.svg?fit=max&auto=format&n=82N53aP7NFbaCVSl&q=85&s=787d39d6a7d96d7f9540dc74344eba23" theme={null}
    import { PrismaClient } from "./generated/client";
    import { PrismaLibSQL } from "@prisma/adapter-libsql";

    const adapter = new PrismaLibSQL({ url: process.env.DATABASE_URL || "" });
    export const prisma = new PrismaClient({ adapter });
    ```
  </Step>

  <Step title="创建测试脚本">
    编写一个创建新用户并统计数据库中用户数量的脚本。

    ```ts index.ts icon="https://mintcdn.com/span-inc/82N53aP7NFbaCVSl/icons/typescript.svg?fit=max&auto=format&n=82N53aP7NFbaCVSl&q=85&s=787d39d6a7d96d7f9540dc74344eba23" theme={null}
    import { prisma } from "./prisma/db";

    // 创建新用户
    await prisma.user.create({
      data: {
        name: "John Dough",
        email: `john-${Math.random()}@example.com`,
      },
    });

    // 统计用户数量
    const count = await prisma.user.count();
    console.log(`数据库中有 ${count} 个用户。`);
    ```
  </Step>

  <Step title="运行并测试应用程序">
    使用 `bun run` 运行脚本。每次运行都会创建一个新用户。

    ```bash terminal icon="terminal" theme={null}
    bun run index.ts
    ```

    ```txt theme={null}
    已创建 john-0.12802932895402364@example.com
    数据库中有 1 个用户。
    ```

    ```bash terminal icon="terminal" theme={null}
    bun run index.ts
    ```

    ```txt theme={null}
    已创建 john-0.8671308799782803@example.com
    数据库中有 2 个用户。
    ```

    ```bash terminal icon="terminal" theme={null}
    bun run index.ts
    ```

    ```txt theme={null}
    已创建 john-0.4465968383115295@example.com
    数据库中有 3 个用户。
    ```
  </Step>
</Steps>

***

Prisma 现已与 Bun 一起设置完成。在构建应用时，请参见 [Prisma 文档](https://www.prisma.io/docs/orm/prisma-client)。
