DrizzleORM v0.29.5 版本发布
2024年3月6日
新功能
🎉 支持 WITH UPDATE, WITH DELETE, WITH INSERT
您现在可以在 INSERT、UPDATE 和 DELETE 语句中使用 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";
有关所有语句的更多示例,请查阅文档。
🎉 支持为迁移表指定自定义 Schema 和自定义名称
- 自定义迁移表
默认情况下,所有关于已执行迁移的信息都将存储在数据库的 __drizzle_migrations
表中,对于 PostgreSQL,则存储在 drizzle
模式中。但是,您可以配置这些记录的存储位置。
要为存储在数据库中的迁移添加自定义表名,您应该使用 migrationsTable
选项。
使用示例
await migrate(db, {
migrationsFolder: './drizzle',
migrationsTable: 'my_migrations',
});
- 自定义迁移 Schema
仅适用于 PostgreSQL 数据库
要为存储在数据库中的迁移添加自定义 Schema 名称,您应该使用 migrationsSchema
选项。
使用示例
await migrate(db, {
migrationsFolder: './drizzle',
migrationsSchema: 'custom',
});
🎉 SQLite Proxy 批量处理和关系查询支持
您可以在文档中找到更多关于 SQLite 代理的信息。
-
您现在可以在 SQLite 代理驱动程序中使用
.query.findFirst
和.query.findMany
语法。 -
SQLite 代理支持批量请求,与所有其他驱动程序的方式相同。请查阅完整文档。
您需要为批量查询指定一个特定的回调函数,并处理向代理服务器发出的请求。
import { drizzle } from 'drizzle-orm/sqlite-proxy';
type ResponseType = { rows: any[][] | any[] }[];
const db = drizzle(
async (sql, params, method) => {
// single query logic
},
// new batch callback
async (
queries: {
sql: string;
params: any[];
method: 'all' | 'run' | 'get' | 'values';
}[],
) => {
try {
const result: ResponseType = await axios.post(
'https://:3000/batch',
{ queries },
);
return result;
} catch (e: any) {
console.error('Error from sqlite proxy server:', e);
throw e;
}
},
);
然后您可以使用 db.batch([])
方法,该方法将代理所有查询。
批量请求的响应应为原始值数组(数组中的数组),顺序与发送到代理服务器的顺序相同。