
Prisma 快速入门官网 • 文档 • 示例 • 博客 • Discord • Twitter • YouTube什么是 PrismaPrisma ORM 是下一代对象关系映射ORM工具由以下组件构成Prisma Client为 Node.js 和 TypeScript 自动生成的类型安全查询构建器。Prisma Migrate声明式数据建模与迁移系统。Prisma Studio用于查看和编辑数据库中数据的图形用户界面GUI。Prisma Client 可用于任何 Node.js 或 TypeScript 后端应用程序包括无服务器应用程序和微服务比如 REST API、GraphQL API、gRPC API 或其他需要数据库的应用。如果你需要与 Prisma ORM 搭配使用的数据库可以考虑 Prisma Postgres若你在寻找 MCP 服务器可点击此处。快速开始快速入门5 分钟使用 Prisma 最快的入门方式是遵循快速入门指南。你可以选择以下两种数据库之一Prisma PostgresSQLite使用已有数据库如果你已有自己的数据库可以参考以下指南将 Prisma 添加到现有项目中从头开始使用 Prisma 设置新项目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 Client。数据模型定义应用程序模型。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), }, })若不使用 Docker 且无需任何配置即可启动本地 PostgreSQL 开发服务器可运行 prisma devnpx prisma dev或者在云端快速启动一个即时 Prisma Postgres® 数据库npx create - db --interactivePrisma 数据模型本节重点介绍数据模型。你可以在相应的文档页面了解更多关于数据源和生成器的信息。Prisma 模型的功能数据模型是模型的集合。一个模型有两个主要功能表示底层数据库中的表。为 Prisma Client API 中的查询提供基础。获取数据模型将数据模型“引入” Prisma 模式主要有两种工作流程通过对数据库进行内省来生成数据模型。手动编写数据模型并使用 Prisma Migrate 将其映射到数据库。一旦定义了数据模型就可以生成 Prisma Client它将为定义的模型提供 CRUD 及更多查询功能。如果你使用 TypeScript所有查询都将具有完整的类型安全性即使只检索模型字段的子集。使用 Prisma Client 访问数据库步骤 1安装 Prisma首先将 Prisma CLI 作为开发依赖项安装并安装 Prisma Clientnpm install prisma --save - dev npm install prisma/client步骤 2设置 Prisma 模式确保你的 Prisma 模式包含一个指定输出路径的生成器块generator client { provider prisma - client output ../generated } datasource db { provider postgresql // mysql, sqlite, sqlserver, mongodb or cockroachdb }步骤 3配置 Prisma使用 prisma.config.ts 文件配置 Prisma CLI。该文件用于配置 Prisma CLI 的子命令如 migrate 和 studio。在项目根目录下创建 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(DATABASE_URL), }, })注意使用 prisma.config.ts 时不会自动加载 .env 文件中的环境变量。你可以在配置文件顶部导入 dotenv/config 来使用 dotenv。对于 Bun会自动加载 .env 文件。了解更多关于 Prisma 配置和所有可用配置选项的信息。步骤 4生成 Prisma Client使用以下命令生成 Prisma Clientnpx prisma generate此命令会读取你的 Prisma 模式并在生成器配置中指定的输出路径生成 Prisma Client 代码。更改数据模型后需要手动重新生成 Prisma Client 以确保生成的代码得到更新npx prisma generate有关“生成 Prisma Client”的更多信息请参考文档。步骤 5使用 Prisma Client 向数据库发送查询生成 Prisma Client 后你可以在代码中导入它并向数据库发送查询。导入并实例化 Prisma Client你可以从生成器配置中指定的输出路径导入并实例化 Prisma Client。实例化客户端时需要向其构造函数提供一个驱动适配器。例如使用 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/config 使用 dotenv也可以使用 tsx --env - file.env、node --env - file.env 或 Bun它会自动加载 .env 文件。现在你可以通过生成的 Prisma Client API 开始发送查询以下是一些示例查询。请注意所有 Prisma Client 查询都返回普通的 JavaScript 对象。在 Prisma Client 文档中了解更多可用操作或观看这个演示视频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: aliceprisma.io, posts: { create: { title: Join us for Prisma Day 2021, }, }, }, })更新现有的 Post 记录const post await prisma.post.update({ where: { id: 42, }, data: { published: true, }, })在 TypeScript 中使用请注意在使用 TypeScript 时此查询的结果将进行静态类型检查这样你就不会意外访问不存在的属性任何拼写错误都会在编译时被捕获。在文档的“生成类型的高级用法”页面了解更多关于利用 Prisma Client 生成类型的信息。社区Prisma 拥有一个庞大且支持性强的应用开发者社区。你可以在 Discord 和 GitHub 上加入我们。徽章用 Prisma 构建了很棒的东西 使用这些徽章展示成果非常适合放在你的 README 或网站上。安全如果你有安全问题需要报告请发送邮件至 securityprisma.io。支持提问你可以在 GitHub 上的 prisma 仓库中就 Prisma 相关主题提问并发起讨论。 [提问](链接需补充)创建错误报告如果你看到错误消息或遇到问题请务必创建错误报告你可以在文档中找到创建错误报告的最佳实践如包含额外的调试输出。 [创建错误报告](链接需补充)提交功能请求如果 Prisma 当前没有某个特定功能请务必查看路线图了解该功能是否已计划在未来实现。如果路线图上的功能链接到了一个 GitHub 问题请务必在该问题上点 并最好留下你对该功能的想法评论 [提交功能请求](链接需补充)贡献请参考我们的贡献指南和贡献者行为准则。测试状态Prisma 测试状态已安排。目前ORM 仓库中的持续集成CI已禁用测试工作流会在推送、拉取请求和手动触发工作流时运行。查看“Actions”选项卡以了解最近的运行情况。你对 Prisma ORM 有什么看法呢