上次分享说到 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{idname}
    }
    

    Prisma(二:基本概念及使用-编程知识网

  • 查询指定数据
    query {user(where: {id:"5e6d9240410df80007983e12"}) {idname}
    }
    

    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! @uniquecreatedAt: DateTime!published: Boolean! @default(value: "false")title: String!author: User!
}
type User {id: ID! @uniqueemail: String @uniquename: 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 使用。


🔗:

  • Prisma(一):初识
  • Prisma(三):检索,Prisma CLI 及 配置
  • Prisma(四):连接本地数据库进行增删改查操作;Subscriptions 订阅