欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Prisma(二):基本概念及使用

程序员文章站 2022-07-13 21:59:37
...

上次分享说到 prisma init 项目名 就可以自动搭建。


http://localhost:4466/_admin 中编辑 data 数据;
http://localhost:4466 中进行 query 和 mutation 操作测试。

我们来操作一下:
Prisma(二):基本概念及使用

这里选择的是创建新的数据库。

⚠️ 第一次进行 prisma init 项目名 的时候,可能会有网络的影响,会进行的特别慢,耐心等待创建后,以后每次创建的时候都会很快啦~

然后我们就按着它的提示(Next steps)来就好。
Prisma(二):基本概念及使用

⚠️ 在进行 docker-compose up -d 的时候,一定要确保此时你的 docker 里没有别的 prisma 或 mongo 容器在运行(利用 docker ps 查看,有的话 docker stop 停止运行就好),否则会报错。

我们现在在 http://localhost:4466 中肯定是查不到数据的,因为我们刚才选择的是新建数据库,所以需要先在 http://localhost:4466/_admin 中插入几条数据:

Prisma(二):基本概念及使用

然后在 http://localhost:4466 中进行 query 测试:

  • 查询所有数据
    query {
      users{
        id
        name
      }
    }
    
    Prisma(二):基本概念及使用
  • 查询指定数据
    query {
      user(where: {
        id:"5e6d9240410df80007983e12"
      }) {
        id
        name
      }
    }
    
    Prisma(二):基本概念及使用

主要概念

在使用 Prisma 进行开发时,需要理解以下三个概念:

  • Datamodel:定义应用的数据模型,是 Prisma client API 生成的基础(可用于数据库迁移)。
  • Prisma server:位于数据库上层的独立基础架构组件。
  • Prisma client:一个自动生成的库,它可以连接到 Prisma 服务器,允许我们在数据库中进行读写和流式传输数据。主要用于应用的数据访问操作。

Datamodel 数据模型

数据模型是 Prisma client 各类 API 操作的基础。

Prisma client 操作源自 datamodel

对应于 datamodel 中定义的每个模型,Prisma 都会自动生成以下 Prisma 客户端操作

  • 读取模型的单条记录
  • 读取模型的多条记录(包括过滤、排序和分页)
  • 生成模型一条新的记录
  • 更新模型中一条已经存在的记录
  • 删除模型中一条已经存在的记录
  • 检查模型中某个记录是否存在
  • 能够实时接收到模型中任何记录的写入操作的更新信息

Schema Definition Language (SDL)

datamodel 是在 .prisma 文件中书写的,它使用 GraphQL SDL 语法。使用 SDL 是因为它与编程语言无关,使用简单,直观并富有表现力。

使用 datamodel 来做数据库迁移

有两种方式来创建 datamodel:

  • 手动编写:当从头开始手动编写数据模型时,数据模型也用于执行数据库迁移(这仅适用于没有现有数据的新数据库)。datamodel 的模型定义不仅确定了 Prisma 客户端的 API 操作,还映射到数据库(这意味着它们用于以声明方式执行数据库迁移)。
  • 源自现有数据库模式(内省):当 Prisma 与现有数据库一起使用时,数据模型将从现有数据库模式派生。在这种情况下,Prisma 不用于执行数据库迁移(相反,您也可以在使用时手动迁移数据库)。

以下是具有两个模型的简单数据模型:

type Post {
  id: ID! @unique
  createdAt: DateTime!
  published: Boolean! @default(value: "false")
  title: String!
  author: User!
}
type User {
  id: ID! @unique
  email: String @unique
  name: String!
  posts: [Post!]!
}

???? 有关数据模型的一些注意事项:

  • PostUser 模型通过关系(由 authorposts 字段定义)连接起来
  • 类型中有 ! 意味着模型的相应字段永远不可能 null
  • 使用 @unique 指令符来确保永远不会有两个具有相同值的记录(唯一性索引)
  • 使用 @default 指令在创建此模型的记录时设置默认值
  • createdAt 不可写,将由 Prisma 维护,它表示创建记录的确切时间。还有 updatedAt 表示上次更新记录的时间。

Prisma client

Prisma client 是一个自动生成的库,用于替代 API server 中的传统的 ORM 库。它连接到位于数据库上层的 Prisma server:
Prisma(二):基本概念及使用

无缝关系型 API

Prisma 客户端提供各种编程语言版本,并提供类型安全的数据库访问。与传统的 ORM 相比,它提供了一个无缝的 API 来处理关系数据,合并和事务。

类型安全的数据访问

Prisma client 暴露出来的操作是强类型的,意味着我们可以获得所有数据库操作的编译时安全性。

所有类型都是自动生成的,因此无需为此编写任何样板文件。更改数据模型后,只需重新生成 Prisma 客户端,所有类型都将得到更新。

实时更新

将实时事件系统添加到数据库是一项非常复杂的任务。Prisma 客户端允许我们订阅任何数据库事件,而无需处理底层基础架构。可以通过 $subscribe 属性上的生成方法执行此操作。

Native GraphQL

Prisma client 让我们使用 $graphql 方法在你的数据库上运行 GraphQL Query 和 Mutation 操作。

Prisma server

Prisma server 是一个连接到你的数据库的独立的基础组件。

Prisma(二):基本概念及使用

它需要使用数据库连接详细信息和用户凭证进行配置工作。

Prisma server 的主要职责是将 Prisma client 发出的请求转换为实际的数据库查询操作。

虽然有多种方法可以设置 Prisma server,但目前推荐使用 Docker 来创建它。

Docker Compose 文件,用于配置连接到本地数据库的 Prisma server。

另外,Prisma 服务器可以部署到你最喜欢的云提供商,例如 AWS,Digital Ocean,Google Cloud,Microsoft Azure,Zeit Now,…

Prisma services 部署在 Prisma server上:
Prisma(二):基本概念及使用

一旦启动并运行,Prisma 服务器主要通过 Management API 使用。




????: