使用 Prisma 从 MySQL、PostgreSQL 和 SQL Server 数据库查询数据 - 一个面向 Node.js 的类型安全的 TypeScript ORM
// Creating a new recordawait prisma.user.create({ firstName: “Alice”, email: “alice@prisma.io”})
id firstName email 1 Bobby bobby@tables.io2 Nilufar nilu@email.com3 Jürgen jums@dums.edu4 Alice alice@prisma.io
TypeScript 是一种静态类型语言,它构建在 JavaScript 之上。它为您提供了 JavaScript 的所有功能,以及额外类型化和验证代码的能力,通过在运行代码之前捕获错误和提供修复来节省您的时间。所有有效的 JavaScript 代码也是 TypeScript 代码,这使得 TypeScript 容易被您采用。
Prisma 是一个面向 Node.js 和 TypeScript 的 ORM,它通过从您的数据库模式自动生成类型,以零成本为您提供类型安全性的优势。它非常适合构建可靠的数据密集型应用程序。Prisma 使您在将数据存储到关系数据库时更有信心和效率。您可以将其与任何 Node.js 服务器框架一起使用来与您的数据库进行交互。
Prisma 模式使用 Prisma 的建模语言来定义您的数据库模式,并生成相应的 TypeScript 类型。它使数据建模变得简单直观,尤其是在建模关系时。
1// Define the `User` table in the database2model User {3 id String @id @default(cuid())4 email String @unique5 password String6 name String?7 posts Post[]8}9
10// Define the `Post` table in the database11model Post {12 id String @id @default(cuid())13 createdAt DateTime @default(now())14 title String15 content String?16 authorId String17 author User @relation(fields: [authorId], references: [id])18}
从 Prisma 模式生成的类型确保所有数据库查询都是类型安全的。 Prisma Client 为您提供了出色的自动完成体验,因此您可以快速移动,并确保您不会编写无效的查询。
1type User = {2 id: string3 email: string4 password: string5 name: string | null6}7
8export type Post = {9 id: string10 createdAt: Date11 title: string12 content: string | null13 authorId: string14}
定义一次您的模式,Prisma 将为您生成 TypeScript 类型。无需在数据库模式和应用程序代码中的类型之间进行手动同步。
以下代码演示了使用 Prisma 进行的数据库查询如何完全类型安全 - 适用于所有查询,包括部分查询和关系。
使用 Prisma Client 进行的查询始终会推断其返回类型,这使得更容易理解返回的数据 - 即使您获取关系时也是如此。
1// Inferred type:2// User & {3// posts: Post[];4// }5const user = await prisma.user.create({6 data: {7 email: '[email protected]',8 password: '0ee4808f893b8e05bdd251048d5c4c8af8bb89403676dda95619841a481f8e87',9 name: 'Alice',10 posts: {11 create: {12 title: 'Learn how to use Prisma with TypeScript',13 content: 'https://prisma.org.cn/docs/',14 },15 },16 },17 include: {18 posts: true,19 },20})
使用 Prisma Client 进行的查询始终会推断其返回类型,这使得更容易理解返回的数据 - 即使您获取关系时也是如此。
1// Inferred type:2// User & {3// posts: Post[];4// }5const user = await prisma.user.create({6 data: {7 email: '[email protected]',8 password: '0ee4808f893b8e05bdd251048d5c4c8af8bb89403676dda95619841a481f8e87',9 name: 'Alice',10 posts: {11 create: {12 title: 'Learn how to use Prisma with TypeScript',13 content: 'https://prisma.org.cn/docs/',14 },15 },16 },17 include: {18 posts: true,19 },20})
Prisma Client 确保完全类型安全的数据库查询,这样您就永远不会编写无效的查询
Prisma 内置的数据加载器确保优化和高效的数据库查询,即使是 N+1 查询也是如此。
Prisma 在您编写查询时通过丰富的自动完成功能帮助您编写查询
使用 Prisma Client 进行的查询始终会推断其返回类型,这使得更容易理解您的数据。
将您的 Prisma 模式映射到数据库,这样您就不需要编写 SQL 来管理您的数据库模式。
Prisma Client 通过为常见的数据库功能提供便捷的 API 来减少样板代码。
1const users = await prisma.user.findMany({2 where: {3 email: {4 endsWith: '@prisma.io',5 }6 },7 include: {8 p9 }10})
在 Prisma,我们热爱 TypeScript 并相信它的光明未来。自从 Prisma 的诞生以来,我们一直在 将 TypeScript 编译器推向极限 为了提供前所未有的类型安全的数据库访问,以及丰富的自动完成功能,从而带来愉快的开发体验。
Prisma 的核心是类型安全,这样您就能少犯错误。通过利用 TypeScript 的结构类型系统,Prisma 将数据库查询映射到 结构类型 这样您就能知道您编写的每个 Prisma Client 查询返回数据的精确形状。
TypeScript Berlin 会议始于 2019 年,是世界上最受欢迎的 TypeScript 会议之一
使用 Prisma、TypeScript 以及各种不同框架和 API 技术的现成运行示例项目
使用 hapi 和 Prisma 构建现代后端 的教程系列
我们有多个渠道供您与社区成员以及 Prisma 团队互动。