首页 > 编程语言 >【译】适用于Node.js和TypeScript的完整ORM —— Prisma

【译】适用于Node.js和TypeScript的完整ORM —— Prisma

时间:2022-10-07 18:35:02浏览次数:59  
标签:Node Prisma TypeScript 开发人员 数据库 prisma 应用程序 id

翻译自:www.prisma.io/blog

Prisma是 Node.js 和 TypeScript 的下一代 ORM。经过两年多的开发,我们很高兴分享所有 Prisma 工具已准备好投入生产!

一个对象关系映射的新范例

Prisma 是适用于 Node.js 和 TypeScript 的下一代开源ORM。它包含以下工具:

  • Prisma Client——自动生成且类型安全的数据库客户端
  • Prisma Migrate——声明式数据建模和可自定义的迁移
  • Prisma Studio——现代化的用户界面,可查看和编辑数据

【译】适用于Node.js和TypeScript的完整ORM —— Prisma_数据库

这些工具可以在任何 Node.js 或 TypeScript 项目中一起或单独采用。Prisma 当前支持 PostgreSQL,MySQL,SQLite,SQL Server(预览版)。 MongoDB 的连接器正在开发中,请在此处注册 Early Access 程序。

数据库是很难的

使用数据库是应用程序开发中最具挑战性的领域之一。数据建模,模式迁移和编写数据库查询是应用程序开发人员每天处理的常见任务。

在 Prisma,我们发现 Node.js 生态系统虽然在构建数据库支持的应用程序中越来越流行,但并未为应用程序开发人员提供处理这些任务的现代工具。

应用程序开发人员应该关心数据,而不是 SQL

随着工具变得更加专业化,应用程序开发人员应该能够专注于为组织实现增值功能,而不必花费时间通过编写胶合代码来遍历应用程序的各个层。

Prisma —— Node.js 和 TypeScript 的完整 ORM

尽管 Prisma 解决了与传统 ORM 相似的问题,但是其对这些问题的处理方式却根本不同。

在 Prisma schema 中数据建模

使用 Prisma 时,您可以在 Prisma 模式中定义数据模型。以下是 Prisma 模型的样例:

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[]
}

schema 中的每一个model都映射到基础数据库中的表,并作为 Prisma Client 提供的生成的数据访问 API 的基础。Prisma 的VS Code 扩展提供语法高亮显示,自动补全,快速修复和许多其他功能,使数据建模具有神奇而令人愉悦的体验。

使用 Prisma Migrate 进行数据库迁移

Prisma Migrate 将 Prisma 模式转换为所需的 SQL,以创建和更改数据库中的表。可以通过Prisma CLI​提供的 prisma migration 命令使用它。

PostgreSQL:

CREATE TABLE "Post" (
"id" SERIAL NOT NULL,
"title" TEXT NOT NULL,
"content" TEXT,
"published" BOOLEAN NOT NULL DEFAULT false,
"authorId" INTEGER,

PRIMARY KEY ("id")
);

CREATE TABLE "User" (
"id" SERIAL NOT NULL,
"email" TEXT NOT NULL,
"name" TEXT,

PRIMARY KEY ("id")
);

CREATE UNIQUE INDEX "User.email_unique" ON "User"("email");

ALTER TABLE "Post" ADD FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE

在基于 Prisma schema自动生成 SQL 的同时,您可以轻松地根据自己的特定需求对其进行自定义。通过这种方法,Prisma Migrate 在生产率和控制力之间取得了很好的平衡。

使用 Prisma Client 进行直观且类型安全的数据库访问

与 Prisma Client 一起使用的主要好处是,它使开发人员可以在对象中进行思考,因此提供了一种熟悉且自然的方式来推理其数据。

Prisma Client 没有模型实例的概念。相反,它有助于制定始终返回纯 JavaScript 对象的数据库查询。多亏了生成的类型,可以为查询获得了自动补全功能。

另外,作为对 TypeScript 开发者的一种奖励。Prisma Client 查询的所有结果都是完全类型化的。事实上,Prisma 提供了任何 TypeScript ORM 中最强大的类型安全保证(你可以在这里阅读与 TypeORM 的类型安全比较)。

列表查询

// Find all posts
const posts = await prisma.post.findMany()

关系查询

// Find all posts and include their authors in the result
const postsWithAuthors = await prisma.post.findMany({
include: { author: true

嵌套插入数据

// Create a new user with a new post
const userWithPosts: User = await prisma.user.create({
data: {
email: '[email protected]',
name: 'Ada Lovelace',
posts: {
create: [{ title: 'Hello World'

过滤

// Find all users with `@prisma` emails
const users = await prisma.user.findMany({
where: {
email: { contains: '@prisma'
const postsByUser = await prisma.user.findUnique({ where: { email: '[email protected]' } }).posts()

分页

const posts = await prisma.post.findMany({
take: 5,
cursor: { id: 2

Prisma Studio 的现代管理界面

Prisma 还为你的数据库提供了一个现代化的管理界面–想想看 phpMyAdmin,但在 2021 年。

标签:Node,Prisma,TypeScript,开发人员,数据库,prisma,应用程序,id
From: https://blog.51cto.com/u_15757429/5734848

相关文章

  • 用 NodeJS 开发一版在线流程图网站
    源码:github.com/maqi1520/Cl…背景对于程序员来说,每天除了写代码,接触较多的可能是各种图表了,诸如流程图、原型图、拓扑图、UML图以及思维导图等等,我们较为熟悉的是Process......
  • [Typescript + React] Tip: Use generics in React to make dynamic and flexible com
    YoucanusegenericsinReacttomakeincrediblydynamic,flexiblecomponents.Here,ImakeaTablecomponentwithageneric'items'type.interfaceTableProp......
  • CentOS 7.9 安装 node-v14.16.0
    下载地址:https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.gz 解压压缩包tarzxvf/opt/software/node-v14.16.0-linux-x64.tar.gz-C/opt/ 添加至......
  • 通过grafana展示prometheus的node和pod数据
    安装grafanagrafana介绍  grafana是⼀个可视化组件,⽤于接收客户端浏览器的请求并连接到prometheus查询数据,最后经过渲染并在浏览器进⾏体系化显示,需要注意的是,grafan......
  • node-exporter和cadvisor收集指标数据
    收集node-exporter指标数据  修改prometheus-server配置文件,在scrape_configs配置项下,添加新job root@prometheus:~\vim/usr/local/prometheus/prometheus.yml........
  • Node.js原生开发基础入门
     1.NodeJS编程基础概要2.本地环境搭建与基础入门3.文件操作与模块化概念4.JavaScript模块化开发5.npm包管理       1.NodeJS编程基础概要node.js与J......
  • [Typescript] 44. Medium - Drop char
    Dropaspecifiedcharfromastring.Forexample:typeButterfly=DropChar<'butterfly!',''>//'butterfly!' /*_____________YourCodeHere......
  • 前端简史之纵横:Node东出
    引......
  • [转]node.js 支持 ES6 模块化
    需检查是否满足以下条件:1、确保安装了v14.15.1或更高版本的node.js2、命令初始化 package.jsonnpminit-y3、在 package.json的根节点中添加 "type":"modu......
  • TypeScript
    学习文档:https://www.runoob.com/typescript/ts-tutorial.htmlTypeScript是JavaScript的一个超集(js的扩展),支持ECMAScript6标准1.安装使用国内镜像:npmconfigset......