」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 了解使用遷移的 Prisma 工作流程

了解使用遷移的 Prisma 工作流程

發佈於2024-08-18
瀏覽:231

Entendendo o Fluxo de Trabalho do Prisma Utilizando Migrations

Prisma 是現代 ORM(物件關聯映射),可促進 Node.js 和 TypeScript 應用程式中與資料庫的互動。 Prisma 最重要的功能之一是遷移系統,它允許您保持資料庫架構與應用程式的資料模型同步。在這篇文章中,我們將探索使用遷移的 Prisma 工作流程。

什麼是遷移?

遷移是一種以系統化和版本化的方式控制和應用資料庫模式變更的方法。它們允許您以增量和可逆的方式定義資料庫的結構更改,例如建立或更改表。

Prisma 遷移工作流程

Prisma 中遷移的典型工作流程涉及以下步驟:

  1. 安裝與初始設定
  2. 架構定義
  3. 創建遷移
  4. 遷移申請
  5. 遷移管理

第 1 步:安裝和初始配置

首先我們需要在專案中安裝Prisma並初始化:

npm install @prisma/client
npx prisma init

此指令建立一個包含 schema.prisma 檔案的 prism 目錄,我們在其中定義資料模型。

第 2 步:架構定義

在 schema.prisma 檔案中,我們定義表示資料庫表的模型。例如,我們定義一個模型 User:

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
}

在這裡,我們定義一個包含 id、email 和 name 欄位的 User 表。

第 3 步:建立遷移

定義或更改架構後,我們建立一個遷移以反映資料庫中的這些變更:

npx prisma migrate dev --name init

migrate dev 指令建立新的遷移並將變更套用到資料庫。 --name 參數可讓您為遷移指定描述性名稱,例如上面範例中的 init。

第四步:移民申請

當我們使用 migrate dev 指令時,遷移會自動套用到資料庫。這可確保資料庫始終與 schema.prisma.

中定義的資料模型同步

如果要在生產環境中應用遷移,請使用指令:

npx prisma migrate deploy

此指令將所有掛起的遷移套用到生產資料庫。

第5步:遷移管理

Prisma 保留所有應用於資料庫的遷移的歷史記錄。這對於追蹤更改並在必要時恢復遷移非常有用。若要查看遷移歷史記錄,可以使用:

npx prisma migrate status

此指令顯示遷移的目前狀態,包括哪些遷移已套用,哪些遷移正在等待。

實際例子

讓我們來看一個實際範例,了解如何在使用者模型中新增欄位並為此變更建立遷移。

  1. 將欄位新增至 schema.prisma 中的使用者模型:

    model User {
      id        Int     @id @default(autoincrement())
      email     String  @unique
      name      String?
      birthdate DateTime?
    }
    
    
  2. 創建新遷移:

    npx prisma migrate dev --name add-birthdate-to-user
    
    
  3. 應用程式遷移:

    migrate dev 指令已將遷移應用到資料庫。現在資料庫將在用戶表中包含新的生日欄位。

  4. 檢查遷移狀態:

    npx prisma migrate status
    
    

    此指令將顯示新增出生日期至使用者遷移已成功套用。

結論

Prisma 使用遷移的工作流程是管理資料庫架構變更的高效且安全的方法。透過一系列清晰的步驟——定義模式、建立遷移、應用變更和管理遷移歷史記錄——可以使資料庫與應用程式的資料模型保持同步,從而促進軟體的開發和維護。

使用 Prisma,您不僅可以簡化資料庫管理,而且還獲得了一個強大的工具來確保所有變更都是可追蹤和可逆的,從而有助於實現更強大和敏捷的開發流程。

版本聲明 本文轉載於:https://dev.to/lemartin07/entendendo-o-fluxo-de-trabalho-do-prisma-utilizando-migrations-29cp?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼HTML無法打印頁碼及解決方案
    為什麼HTML無法打印頁碼及解決方案
    無法在html頁面上打印頁碼? @page規則在@Media內部和外部都無濟於事。 HTML:Customization:@page { margin: 10%; @top-center { font-family: sans-serif; font-weight: ...
    程式設計 發佈於2025-06-09
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-06-09
  • 哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    哪種方法更有效地用於點 - 填點檢測:射線跟踪或matplotlib \的路徑contains_points?
    在Python Matplotlib's path.contains_points FunctionMatplotlib's path.contains_points function employs a path object to represent the polygon.它...
    程式設計 發佈於2025-06-09
  • 解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    程式設計 發佈於2025-06-09
  • 用戶本地時間格式及時區偏移顯示指南
    用戶本地時間格式及時區偏移顯示指南
    在用戶的語言環境格式中顯示日期/時間,並使用時間偏移在向最終用戶展示日期和時間時,以其localzone and格式顯示它們至關重要。這確保了不同地理位置的清晰度和無縫用戶體驗。以下是使用JavaScript實現此目的的方法。 方法:推薦方法是處理客戶端的Javascript中的日期/時間格式化和...
    程式設計 發佈於2025-06-09
  • `console.log`顯示修改後對象值異常的原因
    `console.log`顯示修改後對象值異常的原因
    foo = [{id:1},{id:2},{id:3},{id:4},{id:id:5},],]; console.log('foo1',foo,foo.length); foo.splice(2,1); console.log('foo2', foo, foo....
    程式設計 發佈於2025-06-09
  • 左連接為何在右表WHERE子句過濾時像內連接?
    左連接為何在右表WHERE子句過濾時像內連接?
    左JOIN CONUNDRUM:WITCHING小時在數據庫Wizard的領域中變成內在的加入很有趣,當將c.foobar條件放置在上面的Where子句中時,據說左聯接似乎會轉換為內部連接。僅當滿足A.Foo和C.Foobar標準時,才會返回結果。 為什麼要變形?關鍵在於其中的子句。當左聯接的右側...
    程式設計 發佈於2025-06-09
  • 如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求和假用戶代理繞過網站塊?
    如何使用Python的請求模擬瀏覽器行為,以及偽造的用戶代理提供了一個用戶 - 代理標頭一個有效方法是提供有效的用戶式header,以提供有效的用戶 - 設置,該標題可以通過browser和Acterner Systems the equestersystermery和操作系統。通過模仿像Chro...
    程式設計 發佈於2025-06-09
  • CSS強類型語言解析
    CSS強類型語言解析
    您可以通过其强度或弱输入的方式对编程语言进行分类的方式之一。在这里,“键入”意味着是否在编译时已知变量。一个例子是一个场景,将整数(1)添加到包含整数(“ 1”)的字符串: result = 1 "1";包含整数的字符串可能是由带有许多运动部件的复杂逻辑套件无意间生成的。它也可以是故意从单个真理...
    程式設計 發佈於2025-06-09
  • 如何有效地轉換PHP中的時區?
    如何有效地轉換PHP中的時區?
    在PHP 利用dateTime對象和functions DateTime對象及其相應的功能別名為時區轉換提供方便的方法。例如: //定義用戶的時區 date_default_timezone_set('歐洲/倫敦'); //創建DateTime對象 $ dateTime = ne...
    程式設計 發佈於2025-06-09
  • 如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    如何為PostgreSQL中的每個唯一標識符有效地檢索最後一行?
    postgresql:為每個唯一標識符提取最後一行,在Postgresql中,您可能需要遇到與在數據庫中的每個不同標識相關的信息中提取信息的情況。考慮以下數據:[ 1 2014-02-01 kjkj 在數據集中的每個唯一ID中檢索最後一行的信息,您可以在操作員上使用Postgres的有效效率: ...
    程式設計 發佈於2025-06-09
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-06-09
  • Python高效去除文本中HTML標籤方法
    Python高效去除文本中HTML標籤方法
    在Python中剝離HTML標籤,以獲取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    程式設計 發佈於2025-06-09
  • 如何簡化PHP中的JSON解析以獲取多維陣列?
    如何簡化PHP中的JSON解析以獲取多維陣列?
    php 試圖在PHP中解析JSON數據的JSON可能具有挑戰性,尤其是在處理多維數組時。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    程式設計 發佈於2025-06-09
  • 如何在php中使用捲髮發送原始帖子請求?
    如何在php中使用捲髮發送原始帖子請求?
    如何使用php 創建請求來發送原始帖子請求,開始使用curl_init()開始初始化curl session。然後,配置以下選項: curlopt_url:請求 [要發送的原始數據指定內容類型,為原始的帖子請求指定身體的內容類型很重要。在這種情況下,它是文本/平原。要執行此操作,請使用包含以下標頭...
    程式設計 發佈於2025-06-09

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3