ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Prisma 1 数据种子指南:使用 `prisma seed` 为服务填充初始数据

Prisma 1 数据种子指南:使用 `prisma seed` 为服务填充初始数据 后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载prisma seed是 Prisma 1 CLI 中用于用初始数据填充服务Seed the service with initial data的标准命令。本文以官方参考文档为基础结合本仓库 CLI 源码seed.ts 与 Seeder.ts与prisma.yml配置文档系统讲解prisma seed的完整用法、--reset等核心参数以及seed属性下import与run两种数据种子机制的工作原理。读完本文你将掌握如何为 Prisma 服务声明种子数据、手动触发种子并在部署时自动完成首次数据填充。命令总览prisma seed用于向已部署的 Prisma 服务填充数据。该命令依赖prisma.yml中定义的seed属性——如果prisma.yml中没有seed属性命令会直接报错退出源码见 seed.tsIn order to seed, you need to provide a seed property in your prisma.ymlUsageprisma seed [flags]Flags官方 1.13 参考文档列出的核心参数-r, --reset Reset the service before seeding对照源码实现seed.tsprisma seed实际支持三个 flagsFlag简写类型说明--reset-rboolean在 seed 之前先重置服务清空该服务 stage 中的全部数据--env-file-estring指定.env文件路径用于注入环境变量若路径不存在会报错--project-pstring指定 Prisma 定义文件prisma.yml的路径示例用初始数据填充服务prisma seed先重置服务再填充数据prisma seed --reset执行过程中CLI 会展示形如Seeding based on source的进度信息并在完成后输出耗时prettyTime便于确认种子是否成功执行。前置条件在prisma.yml中声明seedprisma seed本身不携带任何数据所有种子指令都来自服务定义文件prisma.yml的seed属性。该属性是一个对象二选一提供以下子属性详见 YAML-Structure.mdimport指向种子数据文件支持两种类型一个包含 GraphQL 操作mutation的.graphql文件一个包含 Normalized Data Format (NDF) 数据集的.zip文件。run一条 shell 命令用于实现import无法覆盖的更复杂种子场景。三个典型配置示例# 方式一引用包含种子 mutation 的 .graphql 文件 seed: import: database/seed.graphql # 方式二引用 NDF 格式的 .zip 数据集 seed: import: database/backup.zip # 方式三运行 Node 脚本完成更复杂的种子逻辑 seed: run: node script.js注意import与run不能同时出现。源码 Seeder.ts 会在二者同时存在时抛出错误Please provider either seed.import or seed.run but not both at the same time。自动种子首次部署即填充seed还有一个容易被忽视的重要行为种子会在服务首次部署时被隐式执行。也就是说只要在prisma.yml中配置了seed运行prisma deploy部署新服务后CLI 会自动执行种子逻辑无需手动调用prisma seed。若想禁用该行为可在部署时附加--no-seed标志手动补种或重跑种子则随时可以执行prisma seed/prisma seed --reset。种子执行原理从命令到数据的两条路径prisma seed的实际执行由Seeder类完成Seeder.ts。命令启动后Seed命令类会完成以下前置工作seed.ts校验--env-file路径是否存在加载prisma.yml定义this.definition.load获取服务名service与目标 cluster并初始化 cluster 客户端读取seed属性若不存在则报错依据import或run决定种子来源并交给Seeder。Seeder.seed()内部根据种子来源走两条不同路径路径一seed.import—— 导入 GraphQL 操作或 NDF 数据.graphql文件读取文件内容后用graphql库解析parse通过getOperations将文档拆分为一个个 OperationDefinition再逐条调用this.client.exec发送给服务端执行Seeder.ts。任何一条操作失败都会以Error while executing operation形式抛出。.zip文件复用Importer类位于 import/Importer.ts 对应的 import 模块将 NDF 数据集上传导入。源码对import文件有明确校验路径必须以.zip或.graphql结尾且文件必须真实存在否则分别抛出Source must end with .zip or .graphql与Path source does not exist错误Seeder.ts。路径二seed.run—— 执行任意 shell 命令将命令字符串按空白拆分为参数使用cross-spawn以当前工作目录为cwd启动子进程Seeder.ts子进程的 stdout / stderr 会实时打印到 CLI 输出子进程退出码非 0 时视为种子失败reject为 0 时成功resolve。这一机制让种子不再局限于 GraphQL你可以写 Node、TypeScript、Go 或任何脚本作为种子逻辑。参考文档也给出过多种语言的run示例例如seed: run: node ./data/seed.jsseed: run: ts-node ./data/seed.tsseed: run: go run ./data/seed.go--reset的作用时机--reset-r用于在种子前清空服务。从源码看重置动作在种子之前发生Seeder.ts无论走import还是run分支只要reset为true都会先调用this.reset(serviceName, stageName)即通过client.reset删除该servicestage下的全部数据然后再执行种子。CLI 会打印Resetting servicestage的进度与耗时。这也解释了官方示例中prisma seed --reset的语义先删除服务的所有数据再重新填充初始数据非常适合反复验证种子脚本的场景。实战演练从seed.graphql到prisma deploy全流程仓库教程 Data-Export--Import.md 演示了一个完整的种子实战流程可直接作为最小可运行示例第一步在服务目录下创建seed.graphql写入一条创建用户及其关联 posts 的 mutationmutation { createUser(data: { name: Sarah, posts: { create: [ { title: GraphQL is awesome }, { title: It really is }, { title: How to GraphQL is the best GraphQL tutorial } ] } }) { id } }第二步在prisma.yml中通过seed属性告诉 CLI 该文件的存在service: import-example stage: dev datamodel: datamodel.graphql # to enable auth, provide # secret: my-secret disableAuth: true seed: import: seed.graphql第三步运行prisma deployprisma deploy部署过程中 CLI 会自动执行seed.graphql中定义的 mutation向服务 API 发送创建请求。部署完成后打开 GraphQL Playground 发送以下查询即可验证种子是否生效{ users { name posts { title } } }若需要手动重跑种子例如修改了seed.graphql内容或在数据被改动后恢复初始状态则使用prisma seed prisma seed --reset常见错误速查场景报错信息解决办法prisma.yml中缺少seed属性In order to seed, you need to provide a seed property in your prisma.yml在prisma.yml中补充seed.import或seed.runseed同时声明了import与runPlease provider either seed.import or seed.run but not both at the same time二选一保留import文件后缀非法Source must end with .zip or .graphql将文件改为.zip或.graphql后缀import文件不存在Path source does not exist确认import相对路径与文件实际位置一致--env-file路径不存在--env-file path path does not exist修正.env文件路径小结prisma seed以prisma.yml中的seed属性为唯一数据来源支持import.graphqlmutation 或.zipNDF 数据与run任意 shell 命令两种种子机制-r, --reset会在种子前清空整个servicestage实现重置后再填充首次prisma deploy会自动执行种子可用--no-seed关闭完整的种子执行链路可参考 seed.ts 与 Seeder.ts 源码prisma.yml的seed属性完整规范见 YAML-Structure.md端到端示例见 Data-Export--Import.md。赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐Prisma 数据种子填充完全指南prisma seed 命令与 prisma.yml 中的 seed 配置Prisma 数据种子填充完全指南prisma seed 命令与 prisma.yml 中的 seed 配置 prisma seed 是 Prisma CLI后端数据库GraphQLPrisma CLI prisma seed 命令详解用 seed 配置为服务注入初始化数据Prisma CLI prisma seed 命令详解用 seed 配置为服务注入初始化数据 prisma seed 是 Prisma CLI 提供的数据工作后端数据库GraphQLPrisma CLI 数据填充指南prisma seed 命令的使用与底层实现Prisma CLI 数据填充指南 prisma seed 命令的使用与底层实现 prisma seed 是 Prisma CLI 中用于向服务servic后端数据库GraphQL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表