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 通过行业标准的数据库驱动程序原生运行。我们支持所有主流的 PostgreSQLMySQLSQLiteSingleStoreMSSQLCockroachDB 驱动,并且我们还在 非常快地 添加新的驱动。

欢迎加入!

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

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

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

现在就用 Drizzle 和你的 PostgreSQLMySQLSQLiteMSSQLCockroachDB 数据库去构建一些很棒的东西吧。🚀

视频展示