【GraphQL】什么是Prisma?

2023-11-29 22:44
文章标签 graphql prisma

本文主要是介绍【GraphQL】什么是Prisma?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本页提供了Prisma及其工作原理的高级概述。

什么是Prisma?

Prisma是一个开源的下一代ORM。它由以下部分组成:

  • Prisma客户端:Node.js和TypeScript的自动生成和类型安全查询生成器
  • Prisma迁移:迁移系统
  • Prisma Studio:GUI,用于查看和编辑数据库中的数据。

Prisma Studio是Prisma ORM中唯一一个非开源的部分。您只能在本地运行Prisma Studio。Prisma Studio还集成在我们的商业产品Prisma Data Platform中,名称为Data Browser。在数据浏览器中,您可以查看和编辑每个项目的数据,其他团队成员也可以在您授予他们适当角色的权限后进行查看和编辑。

Prisma客户端可以用于任何Node.js(支持的版本)或TypeScript后端应用程序(包括无服务器应用程序和微服务)。这可以是REST API、GraphQL API、gRPC API或任何其他需要数据库的东西。

https://youtu.be/EEDGwLB55bI

How does Prisma work?

The Prisma schema

每个使用Prisma工具箱中工具的项目都以Prisma模式文件开始。Prisma模式允许开发人员用直观的数据建模语言定义他们的应用程序模型。它还包含到数据库的连接,并定义生成器:

关系数据库

MongoDB

datasource db {provider = "postgresql"url      = env("DATABASE_URL")
}generator client {provider = "prisma-client-js"
}model Post {id        Int     @id @default(autoincrement())title     Stringcontent   String?published Boolean @default(false)author    User?   @relation(fields: [authorId], references: [id])authorId  Int?
}model User {id    Int     @id @default(autoincrement())email String  @uniquename  String?posts Post[]
}

注意:Prisma模式具有强大的数据建模功能。例如,它允许您定义“Prisma-level”关系字段,这将使您更容易在Prisma Client API中使用关系。在上述情况下,User上的posts字段仅在“Prisma级别”上定义,这意味着它不会在底层数据库中显示为外键。

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

  • 数据源:指定数据库连接(通过环境变量)
  • Generator:表示要生成Prisma客户端
  • 数据模型:定义应用程序模型

Prisma数据模型

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

Prisma模型的功能

数据模型是模型的集合。模型有两个主要功能:

  • 表示关系数据库中的表或MongoDB中的集合
  • 为Prisma客户端API中的查询提供基础

获取数据模型

将数据模型“获取”到Prisma架构中有两个主要工作流程:

  • 使用Prisma Migrate手动写入数据模型并将其映射到数据库
  • 通过内省数据库生成数据模型

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

使用Prisma客户端访问数据库

生成Prisma客户端

使用Prisma客户端的第一步是安装@Prisma/Client npm包:

$npm install @prisma/client

安装@prisma/client包会调用prisma generate命令,该命令读取您的prisma模式并生成prisma client代码。默认情况下,代码会生成到node_modules/.prsma/client文件夹中。

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

$prisma generate

使用Prisma客户端向数据库发送查询

生成Prisma客户端后,您可以将其导入到代码中,并将查询发送到数据库。这就是设置代码的样子。

导入并实例化Prisma客户端

import

require

import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

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

了解有关Prisma Client API参考资料中可用操作的更多信息。

从数据库中检索所有用户记录

// Run inside `async` functionconst allUsers = await prisma.user.findMany()
在每个返回的User对象上包括posts关系
// Run inside `async` functionconst allUsers = await prisma.user.findMany({include: { posts: true },})
筛选所有包含“prisma”的Post记录
// Run inside `async` function
const filteredPosts = await prisma.post.findMany({where: {OR: [{ title: { contains: 'prisma' } },{ content: { contains: 'prisma' } },],},
})
在同一查询中创建新用户和新发布记录
// Run inside `async` function
const user = await prisma.user.create({data: {name: 'Alice',email: 'alice@prisma.io',posts: {create: { title: 'Join us for Prisma Day 2020' },},},
})
更新现有Post记录
// Run inside `async` function
const post = await prisma.post.update({where: { id: 42 },data: { published: true },
})

与TypeScript一起使用

请注意,使用TypeScript时,此查询的结果将是静态类型的,这样您就不会意外访问不存在的属性(编译时会发现任何拼写错误)。在文档中的“生成类型的高级使用”页面上了解有关利用Prisma客户端生成类型的更多信息。

典型的Prisma工作流

如上所述,有两种方法可以将数据模型“获取”到Prisma模式中。根据您选择的方法,Prisma的主要工作流程可能会有所不同。

Prisma迁移

使用Prisma的集成数据库迁移工具Prisma Migrate,工作流程如下:

  • 手动调整Prisma数据模型
  • 使用prisma Migrate dev CLI命令迁移开发数据库
  • 在应用程序代码中使用Prisma客户端访问数据库

prisma-migrate-development-workflow

To learn more about the Prisma Migrate workflow, see:

  • Deploying database changes with Prisma Migrate
  • Developing with Prisma Migrate

SQL迁移和内省

如果由于某种原因,您不能或不想使用Prisma Migrate,您仍然可以使用内省从数据库架构更新Prisma架构。使用SQL迁移和内省时的典型工作流略有不同:

  1. 使用SQL或第三方迁移工具手动调整数据库架构
  2. (重新)内省数据库
  3. (可选)重新配置Prisma客户端API)
  4. (重新)生成Prisma客户端
  5. 在应用程序代码中使用Prisma客户端访问数据库

prisma-evolve-app-workflow

要了解有关内省工作流程的更多信息,请参阅 introspection section.

文章链接

【GraphQL】什么是Prisma? | 程序员云开发,云时代的程序员.

欢迎收藏【架构师酒馆】和【开发者开聊】

这篇关于【GraphQL】什么是Prisma?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/434602

相关文章

ASP.NET Core 入门教学十七 GraphQL入门指南

GraphQL 是一种用于 API 的查询语言,允许客户端请求所需的数据,并能够合并多个资源到一个请求中。在 ASP.NET Core 中使用 GraphQL 可以提供更灵活、高效和实用的数据查询方式。以下是 ASP.NET Core 中 GraphQL 的入门指南: 1. 安装必要的 NuGet 包 首先,你需要安装以下 NuGet 包: GraphQLGraphQL.Server.Tra

graphQL 管理API的流行趋势

管理API的流行趋势为 graphQL   官网参考地址   https://graphql.org.cn/

GraphQL:API开发的未来,重塑数据交互的艺术

标题:GraphQL:API开发的未来,重塑数据交互的艺术 在当今快速发展的Web应用世界中,API(应用程序编程接口)已成为前后端分离架构的核心。然而,传统的RESTful API存在诸多限制,如过度获取(over-fetching)和数据碎片化。GraphQL,由Facebook于2015年开源,以其声明式查询语言和强大的类型系统,为API开发带来了革命性的改进。本文将深入探讨GraphQL

9 个 GraphQL 安全最佳实践

GraphQL 已被最大的平台采用 - Facebook、Twitter、Github、Pinterest、Walmart - 这些大公司不能在安全性上妥协。但是,尽管 GraphQL 可以成为您的 API 的非常安全的选项,但它并不是开箱即用的。事实恰恰相反:即使是最新手的黑客,所有大门都是敞开的。此外,GraphQL 有自己的一套注意事项,因此如果您来自 REST,您可能会错过一些重要步骤!

GraphQL(9):Spring Boot集成Graphql简单实例

1 安装插件 我这边使用的是IDEA,需要先按照Graphql插件,步骤如下: (1)打开插件管理 在IDEA中,打开主菜单,选择 "File" -> "Settings" (或者使用快捷键 Ctrl + Alt + S 或 Cmd + ,),然后在弹出的对话框中选择 "Plugins"。 (2)搜索GraphQL插件 在插件管理器中,你会看到一个搜索框。在搜索框中输入 "GraphQL

使用React和GraphQL进行CRUD:完整教程与示例

在本教程中,我们将向您展示如何使用GraphQL和React实现简单的端到端CRUD操作。我们将介绍使用React Hooks读取和修改数据的简单示例。我们还将演示如何使用Apollo Client实现身份验证、错误处理、缓存和乐观UI。 什么是React? React是一个用于构建用户界面的JavaScript库。它旨在帮助构建应用程序的前端部分,包括处理Web和移动应用的视图层。 R

GraphQL(6):认证与中间件

下面用简单来讲述GraphQL的认证示例 1 实现代码 在代码中添加过滤器: 完整代码如下: const express = require('express');const {buildSchema} = require('graphql');const grapqlHTTP = require('express-graphql').graphqlHTTP;// 定义s

AI网络爬虫:用GraphQL查询爬取动态网页数据

任务:爬取网站www.skillshare.com搜索结果页面数据: 查看网站的请求信息: 请求网址: https://www.skillshare.com/api/graphql 请求方法: POST 状态代码: 200 OK 远程地址: 127.0.0.1:10809 引荐来源网址政策: strict-origin-when-cross-origin 请

GraphQL(4):GraphQL clients访问接口

下面演示在GraphQL clients访问GraphQL 接口 1 修改baseType.js 添加可供用户访问的静态资源路径 代码如下: const express = require('express');const {buildSchema} = require('graphql');const grapqlHTTP = require('express-graphql')

GraphQL(2):使用express和GraphQL编写helloworld

1 安装express、graphql以及express-graphql 在项目的目录下运行一下命令。 npm init -y npm install express graphql express-graphql -S 2 新建helloworld.js 代码如下: const express = require('express');const {buildS