[{"data":1,"prerenderedAt":100},["ShallowReactive",2],{"content:\u002Fposts\u002F2025\u002Fwhy-di-i-choose-drizzle-orm-in-nodejs":3,"surround:\u002Fposts\u002F2025\u002Fwhy-di-i-choose-drizzle-orm-in-nodejs":89},{"id":4,"title":5,"body":6,"canonical":63,"categories":64,"date":66,"description":67,"draft":68,"extension":69,"image":70,"meta":71,"navigation":72,"path":73,"permalink":63,"readingTime":74,"recommend":63,"references":63,"seo":79,"sitemap":80,"stem":81,"tags":82,"type":87,"updated":66,"__hash__":88},"content\u002Fposts\u002F2025\u002Fwhy-di-i-choose-drizzle-orm-in-nodejs.md","为什么我在 Nodejs 中选择 drizzle",{"type":7,"value":8,"toc":59},"minimark",[9,16,19,22,25,41,44,47,50,53,56],[10,11,12],"blockquote",{},[13,14,15],"p",{},"当你已经有一个意向的时候，后续的所有选择都会围绕这个意向进行。好的坏的都是它与生俱来的光环一样，心中总充满“他不一样”的想法🥵无论好坏总是被深深吸引",[13,17,18],{},"这几天在搞一个项目，在 ORM 选型时， 在 Prisma 和 drizzle 之间犹豫了好久，最后选择了 drizzle。",[13,20,21],{},"明明 Prisma 已经是一个很成熟的框架了，并且背后有一家成熟的商业公司来支撑它。为什么我选择了一个连 1.0 版本都没发布的 drizzle 呢？",[13,23,24],{},"原因大致如下：",[26,27,28,32,35,38],"ol",{},[29,30,31],"li",{},"我需要 ORM 能和前端共享数据模型的类型",[29,33,34],{},"我想要一个轻量一点的 ORM",[29,36,37],{},"我希望能够更灵活地构建查询",[29,39,40],{},"如果能顺便在这过程中学一点 SQL 就更好了",[13,42,43],{},"我们来分析一下。如果要做数据类型的分享，将数据模型抽离到一个单独的包中，我们就可以比较轻松的实现共享数据库模型的类型了。\n相对于 Prisma 来说 drizzle 的类型定义是 TypeScript 实现的，前端可以直接使用它！\n并且它有官方集成的 zod 适配器，可以很方便地将数据模型转换为 zod 的验证模式。",[13,45,46],{},"对于易用性来说，Prisma 无疑是更好的选择，它提供了一套抽象的写法，让我们在不熟悉数据库操作时也能做一些很复杂的查询。\ndrizzle 则更多的是对 SQL 语句的一层抽象，很轻量级。一些复杂的查询需要有一些数据库使用经验才好实现。\n相对于书写时的层层嵌套语法来说，我更喜欢 drizzle 这种类似 SQL 的写法，很简洁。\n但是 Prisma 很易用😅",[13,48,49],{},"对于数据模型的定义，Prisma 也有它的优势，Prisma 有自己的 DSL 来定义数据模型，并且可以通过 prisma migrate 来生成和更新数据库结构。\ndrizzle 则是通过 TypeScript 的类型定义来描述数据模型，并且需要手动编写迁移脚本。而且需要自己管理外键。这\n一方面 Prisma 也有很大的优势。但是如果你更喜欢 SQL 的话，那么选择 drizzle 会更合适一些。",[13,51,52],{},"就像上面所说的，我希望我在写项目时可以顺便熟悉一下 SQL 的各种操作，那么选择 drizzle 就更加合适了。\n而且在一些复杂的查询中我们可以直接在 drizzle 中写 SQL 语句，当然 Prisma 也支持就是了。",[13,54,55],{},"虽然我对 SQL 并不是很了解，但不妨碍我“叶公好龙”似的喜欢它。我总是幻想着某一天我在写其他语言的数据库查询时，可以很方便的将我在 Nodejs 中学到的 SQL 知识迁移过去。\n但是目前看我太喜欢 JavaScript 生态了，可能对于写其他语言的机会没有很多🤣",[13,57,58],{},"说了这么多，好像并没有提到他两连接数据库时查询性能的区别，这方面 drizzle 因为它更轻量的封装，对于 Prisma 这种需要更多抽象的 ORM 来说，性能上的优势就很明显了。",{"title":60,"searchDepth":61,"depth":61,"links":62},"",4,[],null,[65],"代码","2025-09-02 11:09:24","Prisma 很棒，但是 drizzle 更吸引我。",false,"md","https:\u002F\u002Fbitmc.uno\u002Fpicgo\u002Fwhy-di-i-choose-drizzle-orm-in-nodejs.png",{},true,"\u002Fposts\u002F2025\u002Fwhy-di-i-choose-drizzle-orm-in-nodejs",{"text":75,"minutes":76,"time":77,"words":78},"5 min read",4.145,248700,829,{"title":5,"description":67},{"loc":73},"posts\u002F2025\u002Fwhy-di-i-choose-drizzle-orm-in-nodejs",[83,84,85,86],"ORM","Nodejs","TypeScript","drizzle","story","L15K9tPV2gpLJIPFJXcHIu_keVGVp_DDe7zRObUvZe0",[90,95],{"title":91,"path":92,"stem":93,"date":94,"type":87,"children":-1},"广武明长城半日游","\u002Fposts\u002F2025\u002Ftravel-guangwu-changcheng","posts\u002F2025\u002Ftravel-guangwu-changcheng","2025-08-11 00:52:34",{"title":96,"path":97,"stem":98,"date":99,"type":63,"children":-1},"利用 monorepo 在项目中共享 drizzle schema 定义和类型","\u002Fposts\u002F2025\u002Fdrizzle-in-monorepo","posts\u002F2025\u002Fdrizzle-in-monorepo","2025-09-11 12:31:08",1789642588672]