返回市场
棱镜

棱镜

作者:prisma44505 星标更新:2025-11-24

项目介绍

Prisma

<div align="center"> <h1>Prisma</h1> <a href="https://www.npmjs.com/package/prisma"><img src="https://img.shields.io/npm/v/prisma.svg?style=flat" /></a> <a href="https://github.com/prisma/prisma/blob/main/CONTRIBUTING.md"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" /></a> <a href="https://github.com/prisma/prisma/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache%202-blue" /></a> <a href="https://pris.ly/discord"><img alt="Discord" src="https://img.shields.io/discord/937751382725886062?label=Discord"></a> <br /> <br /> <a href="https://www.prisma.io/docs/getting-started/quickstart">快速开始</a> <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span> <a href="https://www.prisma.io/">官网</a> <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span> <a href="https://www.prisma.io/docs/">文档</a> <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span> <a href="https://github.com/prisma/prisma-examples/">示例</a> <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span> <a href="https://www.prisma.io/blog">博客</a> <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span> <a href="https://pris.ly/discord?utm_source=github&utm_medium=prisma&utm_content=repo_readme">Discord</a> <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span> <a href="https://pris.ly/x?utm_source=github&utm_medium=prisma&utm_content=repo_readme">Twitter</a> <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span> <a href="https://pris.ly/youtube?utm_source=github&utm_medium=prisma&utm_content=repo_readme">YouTube</a> <br /> <hr /> </div>

什么是 Prisma?

Prisma ORM 是一个下一代 ORM,由以下工具组成:

  • Prisma 客户端:自动生成且类型安全的查询构建器,适用于 Node.js 和 TypeScript
  • Prisma 迁移:声明式数据建模及迁移系统
  • Prisma Studio:用于查看和编辑数据库中数据的图形用户界面

Prisma 客户端可以在任何 Node.js 或 TypeScript 后端应用程序(包括无服务器应用和微服务)中使用。这可以是一个 REST API,一个 GraphQL API,一个 gRPC API,或任何需要数据库的应用。

如果您需要与 Prisma ORM 配合使用的数据库,请查看 Prisma Postgres 或者我们的 MCP 服务器,请访问 这里

快速开始

快速开始指南(5分钟)

最快的方式是按照快速开始指南进行操作。您可以选择以下两种数据库之一:

自带数据库

如果您已经有自己的数据库,可以参考以下指南:

Prisma ORM 如何工作

本节提供了一个高层次的概述,说明了 Prisma ORM 的工作原理及其最重要的技术组件。如需更详细的介绍,请参阅 Prisma 文档

Prisma 模式

每个使用 Prisma 工具包中的工具的项目都始于一个 Prisma 模式文件。Prisma 模式允许开发人员用一种直观的数据建模语言定义其应用程序模型并配置生成器

// 数据源
datasource db {
  provider = "postgresql"
}

// 生成器
generator client {
  provider = "prisma-client"
  output   = "../generated"
}

// 数据模型
model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
  author    User?   @relation(fields:  [authorId], references: [id])
  authorId  Int?
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  posts Post[]
}

在这个模式中,您配置了三件事:

  • 数据源:指定您的数据库类型,从而定义了您在模式中可以使用的功能和数据类型
  • 生成器:表示您希望生成 Prisma 客户端
  • 数据模型:定义您的应用程序模型

prisma.config.ts

数据库连接详情通过 prisma.config.ts 文件定义。

import { defineConfig } from 'prisma/config'

export default defineConfig({
  datasource: {
    url: 'postgres://...',
  },
})

如果将数据库连接字符串存储在 process.env 中,可以通过 env 函数以类型安全的方式访问它,并在运行时抛出错误,如果缺少该变量:

import { defineConfig, env } from 'prisma/config'

export default defineConfig({
  datasource: {
    url: env('DATABASE_URL'),
  },
})

Prisma ORM 不会自动加载 .env 文件。如果您想从 .env 文件填充环境变量,请考虑使用诸如 dotenv@dotenvx/dotenvx 的包。

在这种情况下,配置文件可能如下所示:

import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'

export default defineConfig({
  datasource: {
    url: env('DATABASE_URL'),
  },
})

要启动本地 PostgreSQL 开发服务器而无需使用 Docker 并且无需任何配置,请运行 prisma dev

npx prisma dev

或者,在云端即时启动一个 Prisma Postgres® 数据库:

npx create-db --interactive

Prisma 数据模型

在此页面上,重点在于数据模型。您可以在相应的文档页面上了解更多关于 数据源生成器 的信息。

Prisma 模型的功能

数据模型是一组 模型。一个模型有两个主要功能:

  • 表示底层数据库中的一个表
  • 为 Prisma 客户端 API 中的查询提供基础

获取数据模型

获取数据模型有两种主要的工作流程:

  • 通过 反向工程 数据库来生成数据模型
  • 手动编写数据模型,并使用 Prisma 迁移 将其映射到数据库

一旦数据模型被定义,您可以 生成 Prisma 客户端,它将暴露已定义模型的 CRUD 和更多查询。如果您使用 TypeScript,您将获得所有查询的完全类型安全性(即使仅检索模型字段的子集)。


使用 Prisma 客户端访问数据库

步骤 1:安装 Prisma

首先,将 Prisma CLI 安装为开发依赖项,并安装 Prisma 客户端:

npm install prisma --save-dev
npm install @prisma/client

步骤 2:设置您的 Prisma 模式

确保您的 Prisma 模式包含一个具有指定 output 路径的 generator 块:

generator client {
  provider = "prisma-client"
  output   = "../generated"
}

datasource db {
  provider = "postgresql"  // mysql, sqlite, sqlserver, mongodb 或 cockroachdb
}

步骤 3:配置 Prisma 配置

使用 prisma.config.ts 文件配置 Prisma CLI。此文件配置 Prisma CLI 子命令,如 migratestudio。在项目根目录创建一个 prisma.config.ts 文件:

import { defineConfig, env } from 'prisma/config'

type Env = {
  DATABASE_URL: string
}

export default defineConfig({
  schema: 'prisma/schema.prisma',
  migrations: {
    path: 'prisma/migrations',
  },
  datasource: {
    url: env<Env>('DATABASE_URL'),
  },
})

注意:当使用 prisma.config.ts 时,不会自动加载 .env 文件中的环境变量。您可以通过在配置文件顶部导入 dotenv/config 来使用 dotenv。对于 Bun,.env 文件会自动加载。

了解更多信息,请参阅 Prisma 配置 及所有可用的配置选项。

步骤 4:生成 Prisma 客户端

使用以下命令生成 Prisma 客户端:

npx prisma generate

此命令读取您的 Prisma 模式,并根据生成器配置中的 output 路径生成 Prisma 客户端代码。

更改数据模型后,您需要手动重新生成 Prisma 客户端,以确保生成的代码得到更新:

npx prisma generate

有关“生成 Prisma 客户端”的更多信息,请参阅 文档

步骤 5:使用 Prisma 客户端发送查询到数据库

一旦生成了 Prisma 客户端,您就可以在代码中导入它并向数据库发送查询。

导入并实例化 Prisma 客户端

您可以从生成器配置中指定的输出路径导入并实例化 Prisma 客户端:

import { PrismaClient } from './generated/client'

const prisma = new PrismaClient()

注意:根据您的数据库,您可能需要使用一个 驱动适配器。例如,当使用带有驱动适配器的 PostgreSQL 时:

import { PrismaClient } from './generated/client'
import { PrismaPg } from '@prisma/adapter-pg'

const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
const prisma = new PrismaClient({ adapter })

要加载环境变量,您可以使用 dotenv 通过导入 dotenv/config,使用 tsx --env-file=.envnode --env-file=.env,或 Bun(它会自动加载 .env)。

现在您可以开始通过生成的 Prisma 客户端 API 发送查询,这里有一些示例查询。请注意,所有 Prisma 客户端查询返回的是普通的 JavaScript 对象

了解更多信息,请参阅 Prisma 客户端文档 或观看这个 演示视频(2 分钟)。

从数据库中检索所有 User 记录
const allUsers = await prisma.user.findMany()
在每个返回的 User 对象中包含 posts 关系
const allUsers = await prisma.user.findMany({
  include: { posts: true },
})
筛选所有包含 "prisma"Post 记录
const filteredPosts = await prisma.post.findMany({
  where: {
    OR: [{ title: { contains: 'prisma' } }, { content: { contains: 'prisma' } }],
  },
})
在同一个查询中创建一个新的 User 和一个新的 Post 记录
const user = await prisma.user.create({
  data: {
    name: 'Alice',
    email: 'alice@prisma.io',
    posts: {
      create: { title: '加入我们参加 2021 年 Prisma 日活动' },
    },
  },
})
更新现有的 Post 记录
const post = await prisma.post.update({
  where: { id: 42 },
  data: { published: true },
})

使用 TypeScript

请注意,当使用 TypeScript 时,此查询的结果将是静态类型的,因此您不会意外地访问不存在的属性(并且任何拼写错误都会在编译时被捕获)。了解更多信息,请参阅文档中的 高级使用生成类型 页面。

社区

Prisma 拥有一个庞大且支持性的 社区,充满热情的应用程序开发者。您可以在 DiscordGitHub 加入我们。

徽标

使用 Prisma 制作 使用 Prisma 制作

使用 Prisma 制作了一些很棒的东西?🌟 展示一下这些 徽标,非常适合您的 README 或网站。

[![使用 Prisma 制作](http://made-with.prisma.io/dark.svg)](https://prisma.io)
[![使用 Prisma 制作](http://made-with.prisma.io/indigo.svg)](https://prisma.io)

安全

如果您有安全问题需要报告,请联系我们 security@prisma.io

支持

提问关于 Prisma

您可以在 GitHub 上的 prisma 仓库中提问和发起 讨论 关于与 Prisma 相关的主题。

👉 提问

创建 Prisma 的 Bug 报告

如果您看到错误消息或遇到问题,请务必创建一个 Bug 报告!您可以在文档中找到 创建 Bug 报告的最佳实践(如包含额外的调试输出)。

👉 创建 Bug 报告

提交功能请求

如果 Prisma 当前没有某个特定功能,请务必查看 路线图,看看是否已经计划在未来实现。

如果路线图上的功能链接到了一个 GitHub 问题,请务必在该问题上留下一个 👍 反应,并尽可能添加一条评论,表达您对该功能的看法!

👉 提交功能请求

贡献

请参阅我们的 贡献指南贡献者行为准则

测试状态

  • Prisma 测试状态: Prisma 测试状态
  • 生态系统测试状态: 生态系统测试状态