后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载本教程围绕 Prisma 1.x 的本地开发场景完整讲解如何在本机用 Docker 拉起一个由 MySQL 驱动的 Prisma 服务器再通过 Prisma CLI 创建并部署第一个 Prisma 服务最后用 GraphQL Playground 对自动生成的 API 进行查询与变更操作。读完本文你将掌握 Prisma 服务端 客户端开发的最小闭环docker-compose.yml服务器编排、prisma.yml服务配置、数据模型定义、prisma deploy部署流程以及基于数据模型自动生成的增删改查与订阅能力。教程概览本教程的目标是让你在自己的机器上跑通一套完整的 Prisma 工作流共分为七个步骤安装 Docker安装 Prisma CLI创建你的 Prisma 服务器Docker MySQL创建你的 Prisma 服务prisma.ymldatamodel.graphql将 Prisma 服务部署到本地服务器在 GraphQL Playground 中探索 Prisma 的 GraphQL API发送查询Query与变更Mutation教程中的所有操作都在本地完成不涉及云端集群。为了确保你不漏掉任何指令所有必须执行的步骤都以编号指令的形式给出如果你只想快速上手而不关心背后的原理可以直接按编号指令一步步执行。准备工作理解 Prisma 的两层结构在动手之前先厘清两个容易混淆的概念这有助于理解后续每一步的目的Prisma 服务器Server一个运行在 Docker 容器中的服务进程负责连接底层数据库本教程为 MySQL、管理数据迁移并对外暴露 GraphQL API。它通过PRISMA_CONFIG环境变量来声明要连接的数据库。Prisma 服务Service由prisma.yml与数据模型文件如datamodel.graphql定义的业务单元。每个服务拥有独立的 GraphQL API数据模型中的每个类型都会在 API 上映射为一组 CRUD 操作。服务器可以承载多个服务本教程先创建一个本地服务器再向它部署一个包含User类型的最小服务。Step 1安装 Docker本教程构建的 Prisma 服务器运行在本地基于 Docker 容器化技术请确保在继续之前已经安装好 Docker。如果你还没有安装 Docker可以按平台下载对应的 Docker 安装包MacDocker CE for Mac社区版桌面安装包WindowsDocker CE for Windows其他平台Docker 官网通用安装包下载完成后双击安装包并按照平台提示完成安装即可。安装成功后可以在终端中运行docker --version与docker-compose --version验证两个命令是否可用后续步骤会同时用到它们。Step 2安装 Prisma CLIPrisma 服务由 Prisma CLI 管理你可以使用npm或yarn全局安装它。打开终端执行npm install -g prisma # 或 # yarn global add prisma在本文对应的仓库中CLI 的源码位于 cli/packages/prisma-cli命令入口实现见 cli/packages/prisma-cli/src核心命令如deploy、playground实现在 cli/packages/prisma-cli-core/src/commands。安装完成后运行prisma --version可以确认安装结果与版本号。Step 3创建你的 Prisma 服务器本教程中所有文件都由你手动创建这样你能清楚地看到每个文件的用途。3.1 创建项目目录打开终端进入你选择的目录并新建一个用于存放 Prisma 项目文件的目录mkdir hello-world3.2 创建 Docker Compose 编排文件进入新目录创建指定 Prisma 服务器与其 MySQL 数据库镜像的 Docker Compose 文件cd hello-world touch docker-compose.yml3.3 编写 docker-compose.yml将以下内容粘贴到docker-compose.yml中version: 3 services: prisma: image: prismagraphql/prisma:1.14 restart: always ports: - 4466:4466 environment: PRISMA_CONFIG: | port: 4466 # uncomment the next line and provide the env var PRISMA_MANAGEMENT_API_SECRETmy-secret to activate cluster security # managementApiSecret: my-secret databases: default: connector: mysql host: mysql port: 3306 user: root password: prisma migrations: true mysql: image: mysql:5.7 restart: always environment: MYSQL_ROOT_PASSWORD: prisma volumes: - mysql:/var/lib/mysql volumes: mysql: ~这份文件声明了两个容器prisma容器使用prismagraphql/prisma:1.14镜像将容器内的4466端口映射到宿主机并通过PRISMA_CONFIG环境变量注入服务器配置端口、可选的集群密钥、数据库连接信息。mysql容器使用mysql:5.7镜像通过MYSQL_ROOT_PASSWORD设置 root 密码为prisma与PRISMA_CONFIG中声明的数据库密码保持一致并用命名卷mysql将数据持久化到/var/lib/mysql避免容器重启导致数据丢失。3.4 解析 PRISMA_CONFIG 中的关键参数PRISMA_CONFIG是 Prisma 服务器读取的核心配置块逐项说明如下参数说明port: 4466Prisma 服务器对外提供 GraphQL 服务的端口必须与ports中映射的宿主机端口一致managementApiSecret可选。取消注释并配合环境变量PRISMA_MANAGEMENT_API_SECRETmy-secret使用用于激活集群安全保护部署与集群管理需要密钥databases.default.connector: mysql数据库连接器类型本教程使用 MySQLdatabases.default.host: mysql数据库主机名。这里写的是 Docker Compose 服务名mysqlCompose 会通过内部 DNS 将其解析为 MySQL 容器的 IPdatabases.default.port: 3306MySQL 默认端口databases.default.user: root数据库用户名databases.default.password: prisma数据库密码需与 MySQL 容器的MYSQL_ROOT_PASSWORD一致databases.default.migrations: true允许 Prisma 对数据库执行迁移部署服务时自动建表/改表仓库自带的开发配置可以作为对照参考server/docker-compose/mysql/prisma.yml 中同样使用了connector: mysql、host、port、user、password等字段并额外展示了rawAccess: true这一可选项开启后允许对数据库进行原生访问而 server/docker-compose/mysql/dev-mysql.yml 则展示了 MySQL 容器单独运行的编排方式使用mysql:5.6镜像、MYSQL_ROOT_PASSWORD: prisma环境变量并将3306端口映射到127.0.0.1。关于 Docker Compose 文件的完整结构说明可查阅仓库文档中 Service 配置相关的参考章节。3.5 启动容器配置文件就绪后使用docker-compose命令启动容器docker-compose up -d-d参数让容器在后台运行。启动完成后你的 Prisma 服务器就运行在http://localhost:4466上了现在可以用 Prisma CLI 向它部署服务了。Step 4创建你的 Prisma 服务创建一个 Prisma 服务所需的最小配置由两个文件组成prisma.yml服务的根配置文件。datamodel.graphql也可以命名为其他名字如types.graphql以 GraphQL SDLSchema Definition Language编写的数据模型定义。4.1 创建两个文件在终端中执行touch prisma.yml touch datamodel.graphql4.2 编写 prisma.yml打开prisma.yml粘贴以下内容endpoint: http://localhost:4466 datamodel: datamodel.graphql这两个属性分别表示endpoint服务的 GraphQL API 地址。这里指向本机 Prisma 服务器http://localhost:4466。从 cli/packages/prisma-yml/src/PrismaDefinition.ts 的源码可以看出CLI 会从endpoint中解析出集群cluster、服务名service与阶段stage信息并校验其必须以http://或https://开头。datamodel数据模型文件的相对路径。源码中该属性同样支持传入路径数组Array.isArray(definition.datamodel)分支即一个服务可以引用多个数据模型文件。4.3 定义数据模型打开datamodel.graphql添加以下User类型type User{ id: ID! unique name: String! }这里的unique指令表示数据库中不能存在两条id相同的User记录Prisma 会在任何时候保证这一约束成立。ID!与String!中的感叹号表示该字段非空required。数据模型是 API 的基础每次修改数据模型并重新执行prisma deploy后Prisma GraphQL API 的 schema 都会随之更新。Step 5部署你的 Prisma 服务到目前为止你只拥有了本地服务配置文件还没有向本机运行的 Prisma 服务器部署任何东西。执行以下命令进行部署prisma deploy结合 cli/packages/prisma-cli-core/src/commands/deploy/deploy.ts 的源码prisma deploy的内部流程大致如下加载配置读取prisma.yml若缺少datamodel属性会直接报错提示The property datamodel is missing in your prisma.yml。解析端点从endpoint推导出集群、服务名与阶段对于本地服务器会检查其是否在线若连不上会提示Could not connect to server ... Please check if your server is running。创建项目如不存在通过projectExists检查目标服务阶段是否已存在首次部署时调用addProject创建 stage并显示Creating stage ... for service ...。执行部署/迁移将数据模型typesString、订阅getSubscriptions、密钥secrets与迁移策略提交给服务器服务器执行迁移步骤并返回进度迁移失败时会抛出包含错误明细的异常。执行钩子与收尾运行prisma.yml中配置的post-deployhooks从 Prisma 1.31 开始部署成功后会自动生成 Prisma Client源码中对同时存在 generate hook 的场景会给出重复执行的警告。deploy命令还支持若干实用 flag例如-f, --force接受 schema 变更可能造成的数据丢失用于忽略迁移警告强制部署。-d, --dry-run仅预演部署输出潜在变更Potential changes:而不实际执行。-n, --new强制进入交互模式选择集群。--no-seed在首次部署服务时禁用 seed 数据填充。-e, --env-file指定.env文件路径以注入环境变量。部署成功后Prisma API 便已就绪可以接收查询Query、变更Mutation和订阅Subscription了。Step 6在 GraphQL Playground 中探索 Prisma 的 GraphQL API服务已经部署但你如何知道如何与它交互它的 API 长什么样一般来说生成的 API 允许对数据模型中的类型执行 CRUD 操作并暴露 GraphQL 订阅让客户端可以订阅特定事件并实时接收更新。由于数据模型包含User类型Prisma API 现在允许客户端对该类型的记录也称为节点进行创建、读取、更新和删除。基于User类型现在生成了以下 GraphQL 操作user按id或其他unique字段查询单个User节点。users查询User节点列表。createUser变更创建新的User节点。updateUser变更更新已有User节点。deleteUser变更删除已有User节点。注意以上列表并不完整。Prisma API 还暴露了更多操作例如批量更新/删除多个节点。但所有操作的本质都是在创建、读取、更新或删除数据模型中定义类型的节点。API 通过 HTTP 暴露你可以用curl或 Postman 等工具与它交互不过 GraphQL 有更顺手的工具——GraphQL Playground一款交互式 GraphQL IDE。6.1 打开 Playground在hello-world目录中再次使用 Prisma CLIprisma playground结合 cli/packages/prisma-cli-core/src/commands/playground/index.ts 的源码该命令的行为逻辑是若检测到本机安装了 GraphQL Playground 桌面应用源码中检测的路径为 macOS 下的/Applications/GraphQL Playground.app则直接拉起桌面应用并传入工作目录与环境变量否则命令会启动一个本地 Web 服务器默认端口3000可通过--port指定打开浏览器访问http://localhost:3000/playground相关 flag 还包括-w, --web强制使用 Web 版、-s, --server-only只启动服务器不打开浏览器。Playground 本身也可以作为独立桌面应用安装未安装时该命令会自动在默认浏览器中打开一个 Playground 实例。GraphQL API 有一个很酷的特性它实际上是自文档化的。GraphQL schema 定义了 API 的全部操作包括输入参数与返回类型这使得 GraphQL Playground 这类工具可以自动生成 API 文档。6.2 查看 API 文档点击 Playground 窗口右侧边缘的绿色SCHEMA按钮即可看到 API 文档。文档面板最左侧一列是 API 接受的全部操作列表你可以逐层下钻查看每个操作的输入参数与返回类型细节。Step 7发送查询与变更掌握了以上内容现在可以正式向你的 API 发送查询和变更了。7.1 查询所有 User在 Playground 左侧面板输入以下查询并点击Play按钮或使用快捷键CMDEnterquery { users { name } }此时服务器只会返回空列表因为数据库中还没有任何User节点。7.2 创建第一个 User在 Playground 中新建一个标签页输入以下变更并发送mutation { createUser(data: { name: Sarah }) { id } }这次服务器响应中包含了实际数据注意id会随每次创建而变化因为服务器会为每个新节点生成全局唯一的 ID{ data: { createUser: { id: cjc69nckk31jx01505vgwmgch } } }7.3 再次查询回到之前包含users查询的标签页再次发送。这次刚刚创建的User节点会出现在服务器响应中。7.4 过滤、排序与分页API 还提供强大的过滤filtering、排序ordering与分页pagination能力。下面是为users查询提供相应输入参数的示例。查询所有name包含字符串ra的User节点query { users(where: { name_contains: ra }) { id name } }查询所有按名称降序排列的User节点query { users(orderBy: name_DESC) { id name } }查询一段User节点列表中第 20-29 条query { users(skip: 20, first: 10) { id name } }下一步构建你的 GraphQL 服务器至此你已经完成了从零搭建 Prisma 服务器Docker MySQL、定义数据模型、部署服务到探索并操作 GraphQL API 的完整闭环。接下来你可以基于这套 API 去构建你自己的 GraphQL 服务器将 Prisma 作为数据访问层在上层用 GraphQL Yoga、Apollo Server 等框架封装业务逻辑与鉴权前端应用则通过 Prisma 生成的客户端或 GraphQL 请求工具与 API 交互。如果你希望使用现有数据库而不是新建数据库可以查阅仓库docs/1.14/03-Tutorials2/01-Setup-Prisma目录下关于连接已有数据库Existing Database的教程关于服务配置、数据模型与 CLI 命令的完整参考可继续阅读仓库docs/1.14下 04-Reference 相关章节。赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐Prisma 快速上手通过 Docker MySQL 创建全新 Prisma 服务器并部署你的第一个服务Prisma 快速上手通过 Docker MySQL 创建全新 Prisma 服务器并部署你的第一个服务 本教程基于 Prisma 1.12 版本完整演后端数据库GraphQLPrisma 1.11 实战用 Docker MySQL 从零搭建本地 Prisma 服务器并部署首个 Prisma 服务Prisma 1.11 实战用 Docker MySQL 从零搭建本地 Prisma 服务器并部署首个 Prisma 服务 导读 本教程以 Prisma后端数据库GraphQL从零开始掌握RD-AgentAI驱动研发自动化的完整指南从零开始掌握RD AgentAI驱动研发自动化的完整指南 在AI时代 研发自动化 正成为提升工业生产力的关键驱动力。RD Agent作为一款开源的 AI研发后端数据库GraphQL上一篇Windows 崩溃转储辅助提供程序解析CoreCLR 的 MINIDUMP_AUXILIARY_PROVIDER 资源机制下一篇如何实现微信聊天记录的本地化永久保存WeChatMsg开源数据导出工具技术解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
基于SparkStreaming的实时音乐推荐系统源码解析与实战 简介:这是一套基于Spark Streaming的实时音乐推荐系统完整源码,面向具备一定Spark与大数据基础、希望深入理解实时推荐链路的中高级开发者。项目围绕微批处理模型展开,涵盖Kafka等数据源接入、用户行为数据清洗与预处理、协同过滤与基于内容的… · 2026/9/23 13:48:48
3个实战技巧搞定ae扫光效果,附源码速查手册 3个实战技巧搞定ae扫光效果,附源码速查手册 别再说“看了一堆教程还是不会写项目”了。 我见过太多人,对着 CSDN 或 B 站的高赞视频,把参数调了又调,图层建了又删,最后导出时还是卡在“怎么让光扫过去才自然”这一步。… · 2026/9/23 13:48:42
H2O 项目中的 OpenSSL 证书验证实战:SSL Conservatory 示例代码深度解析 后端网络 【免费下载链接】h2o H2O - the optimized HTTP/1, HTTP/2, HTTP/3 server 项目地址: https://gitcode.com/gh_mirrors/h2/h2o 点击查看 免费下载 本篇技术指南以 H2O 仓库内 deps/ssl-conservatory/openssl/ 目录下的官方示例代码为核心,系统… · 2026/9/23 13:48:42
Vim 从入门到实践:一篇文章理清模式、命令与配置 我得先讲个真实观察:如果你去翻各搜索引擎里 vim 相关的高频问题,常年霸榜的一定是"vim 如何保存退出""vim 怎么到底端""linux vim 保存和退出"这一类最基础的操作。一个编辑器的基础操作成了大家最常搜索的内容ÿ… · 2026/9/23 14:31:46
Dubbo框架源码拆解:面试必问原理,3分钟搞定RPC核心逻辑 Dubbo框架源码拆解:面试必问原理,3分钟搞定RPC核心逻辑 面试官问:“Dubbo的RPC调用流程是怎样的?”,你如果只能答出“客户端发送请求,服务端接收”,那基本就凉半截了。在Java后端面试中, Dubbo框架… · 2026/9/23 14:31:39
汇川IS810F总线伺服调试指南:从EtherCAT配置到参数整定避坑 简介:《汇川IS810F系列伺服用户手册》是汇川技术官方推出的技术文档,面向电气工程师、设备安装调试与维护人员,提供从开箱验货、安全注意事项,到机械电气安装、参数调试及故障排除的系统指导。资源包内含1个PDF文件,大… · 2026/9/23 14:31:31
Qt中调用VBScript:QAxObject驱动COM脚本引擎实践 前阵子接手一个设备数据采集的Windows桌面项目,Qt 5.12写的,工控机上常年跑着三百多个VBScript脚本。这些脚本承载了客户好几年积累的业务规则:温度超限判定、湿度变化率计算、设备启停逻辑,甚至还有些订单金额计算。客户的态度很… · 2026/9/23 14:31:30
飞机目标检测实战:7930张VOC+YOLO格式数据集使用与训练指南 简介:一套面向飞机目标检测的数据集,适合目标检测算法研究者和计算机视觉初学者直接用于训练与验证。数据采用Pascal VOC与YOLO两种主流标注格式,标注类别只有airplane,非常适合开展单类别目标检测实验、模型精度对比以及参数调优… · 2026/9/23 14:31:23
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29