”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 了解使用迁移的 Prisma 工作流程

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

发布于2024-08-18
浏览:133

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: bo...
    编程 发布于2025-06-09
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于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