Prisma for TypeScript: 完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Prisma 简介:适用于 TypeScript 的现代 ORM



Prisma 是一个适用于 TypeScript 和 Node.js 的现代 ORM(对象关系映射),它从根本上改变了与数据库交互的方式。与 Sequelize 或 TypeORM 等传统 ORM 不同,Prisma 提供了声明式数据模型、自动类型生成和直观的 API。该库支持 PostgreSQL、MySQL、SQLite、SQL Server、MongoDB 和 CockroachDB。



Prisma 的主要目标是使数据库操作安全、高效且便捷。通过与 TypeScript 的集成,您可以在编译阶段获得自动补全和类型检查,从而显著减少运行时错误的数量。Prisma 由三个关键组件组成:



  • Prisma Client — 自动生成的数据库客户端
  • Prisma Migrate — 迁移管理系统
  • Prisma Studio — 用于查看和编辑数据的图形用户界面


安装 Prisma



在 TypeScript 项目中安装 Prisma 通过 npm 完成。首先,创建一个新项目:



mkdir my-prisma-projectcd my-prisma-projectnpm init -y


安装 Prisma CLI 和 Prisma Client:



npm install prisma @prisma/client --save


在项目中初始化 Prisma:



npx prisma init


此命令将创建 prisma 目录(包含 schema.prisma 文件)和用于环境变量的 .env 文件。



快速入门:代码示例



让我们创建一个简单的用户管理应用程序。首先,在 prisma/schema.prisma 中定义模型:



generator client {  provider = "prisma-client-js"}

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

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

model Post { id Int @id @default(autoincrement()) title String content String? published Boolean @default(false) author User @relation(fields: [authorId], references: [id]) authorId Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt}


执行迁移以在 SQLite 中创建表:



npx prisma migrate dev --name init


现在,创建一个 index.ts 文件,其中包含使用示例:



import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

async function main() { // 创建用户 const user = await prisma.user.create({ data: { email: 'alice@example.com', name: 'Alice', posts: { create: { title: 'Hello World' } } } }) console.log('Created user:', user)

// 获取所有用户及其帖子 const users = await prisma.user.findMany({ include: { posts: true } }) console.log('All users:', JSON.stringify(users, null, 2))}

main() .catch(e => console.error(e)) .finally(async () => await prisma.$disconnect())


运行代码:



npx ts-node index.ts


Prisma Client 的主要方法



1. findUnique

功能: 根据唯一标识符(id、email 等)查找单条记录。

参数:

  • where — 包含搜索条件的对象(必填)
  • include — (可选)用于包含关联模型
  • select — (可选)用于选择特定字段

示例:

const user = await prisma.user.findUni                    

推荐