Become a Gold Sponsor
DrizzleORM v0.29.5 发布
Mar 6, 2024

新特性

🎉 WITH 更新、WITH 删除、WITH 插入

现在您可以在 INSERTUPDATEDELETE 语句中使用 WITH 语句。

使用示例

const averageAmount = db.$with('average_amount').as(
	db.select({ value: sql`avg(${orders.amount})`.as('value') }).from(orders),
);

const result = await db
	.with(averageAmount)
	.delete(orders)
	.where(gt(orders.amount, sql`(select * from ${averageAmount})`))
	.returning({
		id: orders.id,
	});
with "average_amount" as (select avg("amount") as "value" from "orders") 
delete from "orders" 
where "orders"."amount" > (select * from "average_amount") 
returning "id";

有关所有语句的更多示例,请查看文档:

🎉 能够指定自定义模式和迁移表的自定义名称

默认情况下,所有有关已执行迁移的信息将存储在数据库的 __drizzle_migrations 表中, PostgreSQL 中则在 drizzle 模式下。然而,您可以配置存储这些记录的位置。

要为存储在数据库中的迁移添加自定义表名,您应使用 migrationsTable 选项。

使用示例

await migrate(db, {
	migrationsFolder: './drizzle',
	migrationsTable: 'my_migrations',
});

仅适用于 PostgreSQL 数据库

要为存储在数据库中的迁移添加自定义模式名称,您应使用 migrationsSchema 选项。

使用示例

await migrate(db, {
	migrationsFolder: './drizzle',
	migrationsSchema: 'custom',
});

🎉 SQLite 代理批量和关系查询支持

您可以在 文档 中找到有关 SQLite 代理的更多信息。

您需要为批量查询指定特定回调并处理对代理服务器的请求:

import { drizzle } from 'drizzle-orm/sqlite-proxy';

type ResponseType = { rows: any[][] | any[] }[];

const db = drizzle(
	async (sql, params, method) => {
		// 单个查询逻辑
	},
	// 新的批量回调
	async (
		queries: {
			sql: string;
			params: any[];
			method: 'all' | 'run' | 'get' | 'values';
		}[],
	) => {
		try {
			const result: ResponseType = await axios.post(
				'http://localhost:3000/batch',
				{ queries },
			);

			return result;
		} catch (e: any) {
			console.error('来自 sqlite 代理服务器的错误:', e);
			throw e;
		}
	},
);

然后您可以使用 db.batch([]) 方法,该方法将代理所有查询。

批量响应应为原始值的数组(数组中的数组),顺序与发送到代理服务器时相同。