getColumns 从 drizzle-orm@1.0.0-beta.2 开始可用(更多信息请看这里)
如果你使用的是 pre-1 版本(如 0.45.1),请使用 getTableColumns
要从你的表模式中获取用于 select 和 insert 查询的类型,你可以使用我们的类型辅助工具。
import { int, text, singlestoreTable } from 'drizzle-orm/singlestore-core';
import { type InferSelectModel, type InferInsertModel } from 'drizzle-orm'
const users = singlestoreTable('users', {
id: int('id').primaryKey(),
name: text('name').notNull(),
});
type SelectUser = typeof users.$inferSelect;
type InsertUser = typeof users.$inferInsert;
// 或
type SelectUser = typeof users._.$inferSelect;
type InsertUser = typeof users._.$inferInsert;
// 或
type SelectUser = InferSelectModel<typeof users>;
type InsertUser = InferInsertModel<typeof users>;要启用默认的查询日志记录,只需将 { logger: true } 传递给 drizzle 初始化函数:
import { drizzle } from 'drizzle-orm/...'; // driver specific
const db = drizzle({ logger: true });你可以通过创建一个 DefaultLogger 实例并为其提供一个自定义的 writer 来更改日志输出目标:
import { DefaultLogger, LogWriter } from 'drizzle-orm/logger';
import { drizzle } from 'drizzle-orm/...'; // driver specific
class MyLogWriter implements LogWriter {
write(message: string) {
// 写入文件、stdout 等
}
}
const logger = new DefaultLogger({ writer: new MyLogWriter() });
const db = drizzle({ logger });你也可以创建一个自定义日志记录器:
import { Logger } from 'drizzle-orm/logger';
import { drizzle } from 'drizzle-orm/...'; // driver specific
class MyLogger implements Logger {
logQuery(query: string, params: unknown[]): void {
console.log({ query, params });
}
}
const db = drizzle({ logger: new MyLogger() });Table creator API 允许你定义自定义表名。
当你需要将不同项目的 schema 保存在同一个数据库中时,这非常有用。
import { int, text, singlestoreTableCreator } from 'drizzle-orm/singlestore-core';
const singlestoreTable = singlestoreTableCreator((name) => `project1_${name}`);
const users = singlestoreTable('users', {
id: int('id').primaryKey(),
name: text('name').notNull(),
});import { defineConfig } from "drizzle-kit";
export default defineConfig({
schema: "./src/schema/*",
out: "./drizzle",
dialect: "singlestore",
dbCredentials: {
url: process.env.DATABASE_URL,
}
tablesFilter: ["project1_*"],
});你可以应用多个 or 过滤条件:
tablesFilter: ["project1_*", "project2_*"]你可以使用 db 实例或通过 独立查询构建器 来打印 SQL 查询。
const query = db
.select({ id: users.id, name: users.name })
.from(users)
.groupBy(users.id)
.toSQL();
// 查询:
{
sql: 'select `id`, `name` from `users` group by `users`.`id`',
params: [],
}如果你有一些复杂的查询需要执行,而 drizzle-orm 目前还无法处理它们,
你可以使用 db.execute 方法来执行原始的 parametrized 查询。
import { ..., SingleStoreRawQueryResult } from "drizzle-orm/singlestore";
const statement = sql`select * from ${users} where ${users.id} = ${userId}`;
const res: SingleStoreRawQueryResult = await db.execute(statement);Drizzle ORM 提供了一个独立的查询构建器,允许你在不创建数据库实例的情况下构建查询,并获取生成的 SQL。
import { QueryBuilder } from 'drizzle-orm/singlestore-core';
const qb = new QueryBuilder();
const query = qb.select().from(users).where(eq(users.name, 'Dan'));
const { sql, params } = query.toSQL();你可以获取一个类型化的列映射, 当你需要在选择时省略某些列时,这非常有用。
getColumns 从 drizzle-orm@1.0.0-beta.2 开始可用(更多信息请看这里)
如果你使用的是 pre-1 版本(如 0.45.1),请使用 getTableColumns
import { getColumns } from "drizzle-orm";
import { user } from "./schema";
const { password, role, ...rest } = getColumns(user);
await db.select({ ...rest }).from(users);import { getTableConfig, singlestoreTable } from 'drizzle-orm/singlestore-core';
export const table = singlestoreTable(...);
const {
columns,
indexes,
checks,
primaryKeys,
name,
schema,
} = getTableConfig(table);instanceof 的替代方案)你可以使用 is() 函数来检查一个对象是否属于某个特定的 Drizzle 类型。
你可以将它用于 Drizzle 中任何可用的类型。
你应该始终使用 is(),而不是 instanceof
几个示例
import { Column, is } from 'drizzle-orm';
if (is(value, Column)) {
// value 的类型被缩小为 Column
}这个 API 是一个未定义的 drizzle({} as any) API 的后继者,我们曾在 Drizzle 的测试中内部使用它,并且很少向外部开发者推荐。
我们决定构建并提供一个正式的 API,现在每个 drizzle 驱动都有 drizzle.mock():
import { drizzle } from "drizzle-orm/...";
const db = drizzle.mock();如果有必要,你可以提供 schema 以获得类型
import { drizzle } from "drizzle-orm/...";
import * as schema from "./schema"
const db = drizzle.mock({ schema });