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

上次分享說到 prisma init 項目名 就可以自動搭建。


http://localhost:4466/_admin 中編輯 data 數據;
http://localhost:4466 中進行 query 和 mutation 操作測試。

我們來操作一下:
在這裏插入圖片描述

這裏選擇的是創建新的數據庫。

⚠️ 第一次進行 prisma init 項目名 的時候,可能會有網絡的影響,會進行的特別慢,耐心等待創建後,以後每次創建的時候都會很快啦~

然後我們就按着它的提示(Next steps)來就好。
在這裏插入圖片描述

⚠️ 在進行 docker-compose up -d 的時候,一定要確保此時你的 docker 裏沒有別的 prisma 或 mongo 容器在運行(利用 docker ps 查看,有的話 docker stop 停止運行就好),否則會報錯。

我們現在在 http://localhost:4466 中肯定是查不到數據的,因爲我們剛纔選擇的是新建數據庫,所以需要先在 http://localhost:4466/_admin 中插入幾條數據:

在這裏插入圖片描述

然後在 http://localhost:4466 中進行 query 測試:

  • 查詢所有數據
    query {
      users{
        id
        name
      }
    }
    
    在這裏插入圖片描述
  • 查詢指定數據
    query {
      user(where: {
        id:"5e6d9240410df80007983e12"
      }) {
        id
        name
      }
    }
    
    在這裏插入圖片描述

主要概念

在使用 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:

無縫關係型 API

Prisma 客戶端提供各種編程語言版本,並提供類型安全的數據庫訪問。與傳統的 ORM 相比,它提供了一個無縫的 API 來處理關係數據,合併和事務。

類型安全的數據訪問

Prisma client 暴露出來的操作是強類型的,意味着我們可以獲得所有數據庫操作的編譯時安全性。

所有類型都是自動生成的,因此無需爲此編寫任何樣板文件。更改數據模型後,只需重新生成 Prisma 客戶端,所有類型都將得到更新。

實時更新

將實時事件系統添加到數據庫是一項非常複雜的任務。Prisma 客戶端允許我們訂閱任何數據庫事件,而無需處理底層基礎架構。可以通過 $subscribe 屬性上的生成方法執行此操作。

Native GraphQL

Prisma client 讓我們使用 $graphql 方法在你的數據庫上運行 GraphQL Query 和 Mutation 操作。

Prisma server

Prisma server 是一個連接到你的數據庫的獨立的基礎組件。

它需要使用數據庫連接詳細信息和用戶憑證進行配置工作。

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 服務器主要通過 Management API 使用。




🔗:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章