Drizzle ORM

Drizzle ORM 是一个带有“头脑”的无头 TypeScript ORM。🐲

Drizzle 就像一位贴心的朋友:在你需要时陪伴你,在你想要一些空间时也不会打扰你。

它看起来和用起来都很简单,在你项目的第 1000 天依然表现出色,
让你按自己的方式做事,并在你需要时随时出现。

它是唯一同时提供 关系型 和 类 SQL 查询 API 的 ORM, 在访问关系数据时为你提供两全其美的体验。 Drizzle 轻量、高性能、类型安全、无乳糖、无麸质、清醒、灵活,并且从设计上就支持 serverless。 Drizzle 不仅仅是一个库,它更是一种体验。🤩

Drizzle bestofjs

无头 ORM?

首先,Drizzle 是一个库以及一组可互相补充、按需启用的工具。

ORM 是 对象关系映射(object relational mapping)的缩写,开发者通常会把类似 Django 或 Spring 的工具称为 ORM。 我们真心认为这是一种基于旧有命名方式的误解,我们更愿意称它们为 数据框架。

WARNING

使用数据框架时,你必须围绕它们来构建项目,而不是与它们一起构建项目。

Drizzle 让你按照自己想要的方式构建项目,而不会干扰你的项目或结构。

使用 Drizzle,你可以在 TypeScript 中定义和管理数据库模式,以类似 SQL 或关系型的方式访问数据,并利用按需启用的工具 将你的开发体验推向 极致。🤯

为什么是 SQL 风格?

如果你懂 SQL,你就懂 Drizzle。

其他 ORM 和数据框架往往会偏离/抽象掉 SQL, 这会导致双重学习曲线:既要懂 SQL,又要懂框架的 API。

Drizzle 则相反。
我们拥抱 SQL,并将 Drizzle 打造成以 SQL 风格为核心的工具,这样你几乎不需要学习成本,就能获得 SQL 的全部能力。

我们带来所有熟悉的 SQL schema、查询、自动迁移 以及 另一件事。 ✨

index.ts
schema.ts
migration.sql
// 访问你的数据
await db
	.select()
	.from(countries)
	.leftJoin(cities, eq(cities.countryId, countries.id))
	.where(eq(countries.id, 10))

为什么不使用类 SQL?

我们一直在努力寻找一个完美平衡的解决方案,虽然类 SQL 的方式确实覆盖了 100% 的需求,
但在某些常见场景下,你可以用更好的方式查询数据。

我们为你构建了 Queries API,这样你就可以以最方便、性能最优的方式从数据库中获取关系型嵌套数据,
再也不用考虑连接查询和数据映射。

Drizzle 始终只会输出 בדיוק 1 条 SQL 查询。 欢迎放心将它用于无服务器数据库,永远不必担心性能或往返成本!

const result = await db.query.users.findMany({
	with: {
		posts: true
	},
});

无服务器?

最棒的部分就是没有多余的部分。Drizzle 恰好 0 个依赖!

Drizzle is slim an Serverless ready

Drizzle ORM 从设计之初就针对特定方言、轻量、高性能,并且支持无服务器部署。

我们花了大量时间,确保你能获得一流的 SQL 方言支持,包括 Postgres、MySQL 以及其他数据库。

Drizzle 通过行业标准的数据库驱动程序原生运行。我们支持所有主流的 PostgreSQL、MySQL、SQLite、SingleStore、MSSQL 或 CockroachDB 驱动,并且我们还在 非常快地 添加新的驱动。

欢迎加入!

越来越多的公司正在生产环境中采用 Drizzle,并在 DX 和性能方面获得了巨大的收益。

我们随时都在这里提供帮助,所以请随时联系我们。我们很乐意在你的 Drizzle 之旅中为你提供支持!

我们拥有一个出色的 Discord 社区,并欢迎所有开发者加入我们的 Twitter。

现在就用 Drizzle 和你的 PostgreSQL、MySQL、SQLite、MSSQL 或 CockroachDB 数据库去构建一些很棒的东西吧。🚀

视频展示