Prisma 数据导出实战指南:CLI 命令与原始 Export API 全解析(NDF 格式)
后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载Prisma 服务的数据导出既可以通过prisma export命令一键完成也可以直接调用服务端暴露的原始 Export API。两种方式产出的数据均为 JSON 格式并遵循 Prisma 的规范化数据格式Normalized Data Format简称 NDF因此导出的数据可以直接导入到 schema 完全一致的服务中例如在dev环境准备测试数据。读完本文你将掌握prisma export的完整用法、NDF 输出结构、原始/export接口的请求与游标cursor分页语义并从源码层面理解导出链路的实现原理。一、两种导出方式的总体对比Prisma 提供两条导出路径它们共享同一套底层导出逻辑维度CLI 导出原始 Export API命令/入口prisma exportPOST 到服务 HTTP 端点的/export路径认证复用 CLI 的认证机制自动携带 token必须在 HTTPAuthorization头中手动携带 JWT token文件落盘自动将下载数据写入文件系统并打包为.zip只返回 JSON 响应需自行处理存储游标管理自动循环请求直到数据取完每次响应返回新游标需要手动携带重发请求从源码实现看CLI 的prisma export底层正是封装了下一节介绍的原始 Export APICLI 通过 Client.download 方法向集群的 export 端点发起 POST 请求并自动处理分页与文件写盘源码见 commands/export/index.ts 与 commands/export/Exporter.ts。这解释了为什么使用 CLI 导出具三个明显优势复用认证机制无需手工发送 token、直接写入文件系统、自动进行游标管理手工方式需要多次发请求并每次调整游标。二、使用 CLI 导出数据命令与参数CLI 提供的导出命令为prisma export文档中记载该命令接受一个核心选项--export-path短写-e指定一个.zip文件路径CLI 会创建该文件并将导出的数据写入其中。需要说明的是当前仓库中的实现commands/export/index.ts已对参数做了演进实际定义的 flags 包括--path短写-p导出.zip文件的路径--env-file短写-e注入环境变量的.env文件路径--projectPrisma 定义文件prisma.yml的路径。此外源码还给出两个实用细节自动补全扩展名如果传入的路径不以.zip结尾CLI 会自动追加.zip如果完全未指定路径则默认生成名为export-ISO时间戳.zip的文件如export-2026-09-23T00:46:01.000Z.zip文档型数据库不支持如果数据模型定义中的databaseType为document即 MongoDBCLI 会直接抛出错误提示使用数据库原生的导出工具如mongodump。同时对关系型数据库的导出CLI 会打印一条警告prisma1 export命令未来将不再继续开发建议相关工作流使用数据库原生导出特性MySQL 的mysqldump、Postgres 的pg_dump等。导出后的提示导出完成后CLI 会打印导出文件路径并给出对应的导入命令提示Exported service to export-timestamp.zip You can import it to a new service with $ prisma import --data export-timestamp.zip这体现了导出与导入的闭环设计NDF 数据可以被prisma import直接回灌到 schema 一致的服务。CLI 导出在源码中的完整流程Exporter.ts 揭示了 CLI 导出的内部步骤在.export临时目录下创建nodes、lists、relations三个子目录makeDirs依次对nodes、lists、relations三种 NDF 类型执行分页下载downloadFiles每次分页响应成功后将响应中的jsonElements包装为{ valueType, values }结构写入编号 JSON 文件文件名带前导零如000001.json、000002.json以返回的新cursor作为下一次请求的游标继续循环直到游标之和小于 0即服务端返回终止游标为止全部下载完成后用archiver库将.export目录打包成目标.zip文件随后清理临时目录。也就是说即便数据量很大需要数十次请求CLI 也会自动持续拉取直至完整导出这正是文档强调的“cursor management”能力。三、输出格式NDF 与三个目录导出的数据遵循 Normalized Data FormatNDF解压.zip后会得到三个以 NDF 类型命名的目录nodes/模型节点数据即每个 model 的实例记录lists/标量列表字段scalar list数据relations/关系relation数据即模型之间的关联记录。CLI 的 Exporter.ts 中定义了三种文件类型export type FileType nodes | relations | lists服务端 ImportExport.scala 进一步说明这三类数据对应的“表”维度NodeInfo按 model 顺序编号table对应 model 下标逐行导出节点的所有标量字段ListInfo按“模型标量列表字段”组合编号table对应列表字段下标RelationInfo按 relation 顺序编号table对应 relation 下标。每个 JSON 文件中节点数据形如{ valueType: nodes, values: [ { _typeName: User, id: cjx8..., name: Alice } ] }其中_typeName指明所属模型id为记录主键其余键为标量字段值服务端序列化逻辑见 BulkExport.scala。四、使用原始 Export API 导出原始导出接口位于服务 HTTP 端点的/export路径下例如http://localhost:60000/my-app/dev/exporthttps://database.prisma.sh/my-app/prod/export接口要求方法POST请求头必须在Authorization头中携带认证 tokenBearer JWT请求体JSON包含fileType与cursor两个字段响应上限单次请求最多可下载约 10 MB 的 NDF JSON 数据该上限由服务端maxImportExportSize配置控制详见下文源码解析。一次导出的请求体示例如下{ fileType: nodes, cursor: { table: 0, row: 0, field: 0, array: 0 } }游标cursor的含义cursor中的四个值描述了数据库中开始导出的偏移位置table表偏移对应 model / 列表字段 / relation 的序号row行偏移对应当前表内已导出的记录数field字段偏移array数组偏移。服务端定义见 ImportExport.scala核心游标实际由table与row组成field与array为兼容保留字段源码注释也明确指出未来希望去掉这两个字段使 CLI 与其解耦。响应游标的两种状态每次导出响应都会返回一个新的cursor它只有两种状态终止状态导出完成若table、row、field、array全部为-1表示该fileType的数据已全部导出完毕非终止状态未导出完若四个值中任何一个不等于-1说明已达到单次响应的大小上限约 10 MB此时应将响应返回的cursor原样作为下一次请求的输入继续导出剩余数据。服务端在 ImportExport.scala 的cursorWrites中实现了这一序列化规则仅当table与row均为-1时field与array才写为-1否则写为0并在 BulkExport.scala 的resForCursor中当数据取完时返回Cursor(-1, -1)以标记终止。完整 curl 示例下面是导出 NDF 类型为nodes数据的完整curl命令示例中的 JWT 仅为演示占位curl http://localhost:60000/my-app/dev/export \ -H Content-Type: application/json \ -H Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJPbmxpbmUgSldUIEJ1aWxkZXIiLCJpYXQiOjE1MTM1OTQzMTEsImV4cCI6MTU0NTEzMDMxMSwiYXVkIjasd3d3LmV4YW1wbGUuY29tIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsIkdpdmVuTmFtZSI6IkpvaG5ueSIsIlN1cm5hbWUiOiJSb2NrZXQiLCJFbWFpbCI6Impyb2NrZXRAZXhhbXBsZS5jb20iLCJSb2xlIjpbIk1hbmFnZXIiLCJQcm9qZWN0IEFkbWluaXN0cmF0b3IiXX0.L7DwH7vIfTSmuwfxBI82D64DlgoLBLXOwR5iMjZ_7nI \ -d {fileType:nodes,cursor:{table:0,row:0,field:0,array:0}} \ -sSv通用的占位符版本如下便于你直接替换为实际值curl __SERVICE_ENDPOINT__/export \ -H Content-Type: application/json \ -H Authorization: Bearer __JWT_AUTH_TOKEN__ \ -d {fileType:__NDF_TYPE__,cursor: {table:__TABLE__,row:__ROW__,field:__FIELD__,array:__ARRAY__}} \ -sSv手动使用该接口时需要重复发送请求每次把响应返回的cursor填入下一次请求直至服务端返回全-1的终止游标。对于数据量较大的服务这一过程容易出错因此优先推荐使用 CLI。五、源码视角服务端导出链路的实现原理服务端导出逻辑集中在 BulkExport.scala其核心设计可以概括为三层分页按 fileType 分发executeExport根据fileType分别构造NodeInfo、ListInfo、RelationInfo。如果模型为空、无列表字段或无 relation则直接返回空的终止结果BulkExport.scala表内分页resultForTable通过DataResolver按每页 1000 条拉取数据first Some(1000)直到当前“表”取完BulkExport.scala表间推进resForCursor在当前表取完后通过cursorAtNextModel把table加一并把row归零切换到下一个 model / 列表字段 / relation全部取完后返回Cursor(-1, -1)作为终止标记BulkExport.scala。关于“10 MB 响应上限”服务端通过maxImportExportSize配置来控制单次响应的 JSON 体量isLimitReached会累计已序列化元素的字节数一旦超过上限即返回当前游标BulkExport.scala。该配置在 ApiDependencies.scala 中定义默认值为1000000单位字节实际单次响应的最大体量以你部署环境中的配置值为准。从关系型数据到 NDF 的序列化细节也值得留意BulkExport.scala节点输出{_typeName: 模型名, id: 主键, ...标量字段}主键会根据 GC 值类型输出为字符串UUID / 字符串 ID或数字整数 ID列表输出{_typeName: 模型名, id: 所属记录主键, 字段名: 列表值}关系输出包含左右两侧的数组每侧为{_typeName: 模型名, id: 对端主键, fieldName: 字段名}。六、导出数据的回灌与 Import 的闭环导出的 NDF 数据可以直接导入到 schema 一致的服务典型场景包括在dev环境准备测试数据。导入侧的对应实现为 commands/import/Importer.tsCLI 导入命令为prisma import --data 导出zip导入时会先解压 zip校验nodes、lists、relations三个目录是否存在并逐文件校验 NDF 结构validateFiles导入过程按nodes→lists→relations的顺序上传并通过state.json记录进度异常中断后可断点续传已导入的文件会被自动跳过上传同样走原始 APIClient.upload向集群的 import 端点 POST 数据见 Client.ts。由此可以推断导出与导入在格式上是对称的导出时Exporter写盘的结构{ valueType, values }与导入时Importer读取并上传的结构完全一致保证了两条链路之间的数据可无缝往返。七、使用注意事项与限制文档型数据库暂不支持databaseType为document时prisma export会直接报错需要改用数据库原生工具如mongodump功能演进状态CLI 会对关系型数据库的导出打印“该命令未来不再继续开发”的警告建议长期工作流评估数据库原生导出方案MySQL 与 Postgres 均已有成熟工具手动调用 API 需管理游标数据量大时单次请求无法取完必须循环携带新游标请求直至收到全-1的终止游标使用 CLI 可自动完成这一过程认证不可省略原始 API 要求请求头携带有效的Authorization: Bearer JWT否则请求会被拒绝schema 一致性前提NDF 数据只能在 schema 完全一致的服务之间迁移schema 不一致时导入可能失败。结语无论是通过prisma export一键打包还是通过原始/export接口精细控制分页Prisma 的数据导出都以统一的 NDF 格式交付并与导入链路天然打通。理解游标语义与服务端的分页实现能帮助你在大数据量导出、跨环境数据迁移和测试数据准备等场景中避免踩坑。相关源码可继续阅读CLI 导出命令cli/packages/prisma-cli-core/src/commands/export/index.tsCLI 导出器实现cli/packages/prisma-cli-core/src/commands/export/Exporter.ts服务端导出核心server/servers/api/src/main/scala/com/prisma/api/import_export/BulkExport.scala游标与请求/响应模型server/servers/api/src/main/scala/com/prisma/api/import_export/ImportExport.scalaCLI 导入对应实现cli/packages/prisma-cli-core/src/commands/import/Importer.ts赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐Prisma 服务数据导入导出实战NDF 格式、prisma import/export 命令与原始 HTTP API 全解析Prisma 服务数据导入导出实战NDF 格式、prisma import/export 命令与原始 HTTP API 全解析 本篇技术指南以 Prisma后端数据库GraphQLPrisma 数据导出完全指南CLI 命令与原生 Export API 实战基于 NDF 格式Prisma 数据导出完全指南CLI 命令与原生 Export API 实战基于 NDF 格式 本指南系统讲解 Prisma 服务数据导出的两种官方途径—后端数据库GraphQLPrisma 数据导入与导出实战指南NDF 标准化格式、prisma import/export 命令与原始 HTTP APIPrisma 数据导入与导出实战指南NDF 标准化格式、prisma import/export 命令与原始 HTTP API 本指南以 Prismapri后端数据库GraphQL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

mRemoteNG 连接管理完全指南:Connections 面板的树形组织、属性配置与连接开关实战

mRemoteNG 连接管理完全指南:Connections 面板的树形组织、属性配置与连接开关实战

mRemoteNG 连接管理完全指南:Connections 面板的树形组织、属性配置与连接开关实战 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com…

2026/9/23 21:59:52 阅读更多 →
AI-Research-SKILLs AWQ 高级使用指南:激活感知权重量化的内核选型、校准策略与部署优化

AI-Research-SKILLs AWQ 高级使用指南:激活感知权重量化的内核选型、校准策略与部署优化

AI-Research-SKILLs AWQ 高级使用指南:激活感知权重量化的内核选型、校准策略与部署优化 【免费下载链接】AI-Research-SKILLs Comprehensive open-source library of AI research and engineering skills for any AI model. Package the skills and your claude co…

2026/9/23 21:59:52 阅读更多 →
DCGAN低对比度红外图像增强实战:原理、训练与部署全流程

DCGAN低对比度红外图像增强实战:原理、训练与部署全流程

简介:基于 DCGAN 的低对比度红外图像增强项目资源,面向红外图像处理、计算机视觉以及深度学习应用开发人群,针对红外图像对比度低、目标轮廓模糊等痛点,给出了一套从数据预处理到模型训练、推理的完整实战方案。算法采用生成器与判…

2026/9/23 21:59:52 阅读更多 →

最新新闻

Flutter数值映射库num_remap在鸿蒙开发中的应用与优化

Flutter数值映射库num_remap在鸿蒙开发中的应用与优化

1. Flutter 三方库 num_remap 鸿蒙适配实战指南在 OpenHarmony 生态中开发动态交互应用时,数值范围映射是个高频需求场景。无论是处理传感器数据、手势操作还是动画效果,都需要将原始数据转换为适合 UI 展示的数值范围。传统的手写映射代码不仅冗长难维护…

2026/9/24 0:01:25 阅读更多 →
Lss-bev IndexPut插件:前端高效索引操作实践

Lss-bev IndexPut插件:前端高效索引操作实践

1. 项目背景与核心价值Lss-bev系列插件作为现代前端工程化体系中的重要组成部分,其IndexPut模块的部署实践直接影响着数据索引操作的性能表现。在实际项目中,我们经常遇到需要高效处理大规模索引更新的场景,而传统方案往往面临以下痛点&#…

2026/9/24 0:01:25 阅读更多 →
JSP+JDBC+MySQL+Servlet图书管理系统实战:从源码部署到性能优化

JSP+JDBC+MySQL+Servlet图书管理系统实战:从源码部署到性能优化

简介:面向Java Web初学者,这份图书管理项目源码以图书信息增删改查为主线,完整整合了JSP、JDBC、MySQL与Servlet技术栈,演示了从页面展示、请求处理到数据库读写的基本路径,适合用来理解MVC分层与原生Web开发流程。压缩…

2026/9/24 0:01:25 阅读更多 →
Lombok与JDK版本冲突引发NoSuchFieldError:根因排查与修复指南

Lombok与JDK版本冲突引发NoSuchFieldError:根因排查与修复指南

如果你在某个平平无奇的下午执行mvn clean package,看到编译进度条卡在注解处理阶段,随之蹦出这么一行:java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ...基本可以确认一件事&…

2026/9/24 0:01:25 阅读更多 →
面向对象综合训练:从图书管理系统掌握封装、继承与多态

面向对象综合训练:从图书管理系统掌握封装、继承与多态

面向对象学完语法之后,最尴尬的阶段就是“懂的都懂,一写就懵”。day09这个综合训练,说白了就是把前面封装、继承、多态、抽象这些概念,从“背概念”切换到“用概念”。这篇我把自己的练习过程完整拆开,从选题思路到代码…

2026/9/24 0:01:25 阅读更多 →
Windows系统安装全指南:从U盘启动盘制作到UEFI/GPT分区方案

Windows系统安装全指南:从U盘启动盘制作到UEFI/GPT分区方案

不管是给老电脑续命,还是给新装的机器做首次引导,Windows系统的安装都属于那种“看着简单,做起来全是细节”的活儿。我前前后后帮同事、朋友装了不下几十台机器,自己也因为手贱删错分区、改了引导方式导致安装失败过好多次&#x…

2026/9/24 0:00:20 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →