import { ..., SingleStoreQueryResult } from "drizzle-orm/singlestore";const statement = sql`select * from ${users} where ${users.id} = ${userId}`;const res: SingleStoreRawQueryResult = await db.execute(statement);
독립 실행형 쿼리 빌더
Drizzle ORM은 데이터베이스 인스턴스를 생성하지 않고도 쿼리를 작성하고 생성된 SQL을 얻을 수 있는 독립 실행형 쿼리 빌더를 제공합니다.
PostgreSQL
MySQL
SQLite
SingleStore
import { QueryBuilder } from 'drizzle-orm/pg-core';const qb = new QueryBuilder();const query = qb.select().from(users).where(eq(users.name, 'Dan'));const { sql, params } = query.toSQL();
import { QueryBuilder } from 'drizzle-orm/mysql-core';const qb = new QueryBuilder();const query = qb.select().from(users).where(eq(users.name, 'Dan'));const { sql, params } = query.toSQL();
import { QueryBuilder } from 'drizzle-orm/sqlite-core';const qb = new QueryBuilder();const query = qb.select().from(users).where(eq(users.name, 'Dan'));const { sql, params } = query.toSQL();
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();
타입이 지정된 테이블 컬럼 가져오기
특정 컬럼을 선택에서 제외해야 할 때 유용하게 사용할 수 있는 타입이 지정된 테이블 컬럼 맵을 가져올 수 있습니다.
PostgreSQL
MySQL
SQLite
SingleStore
index.ts
schema.ts
import { getTableColumns } from "drizzle-orm";import { user } from "./schema";// user 테이블의 컬럼을 가져옴const { password, role, ...rest } = getTableColumns(user);// password와 role을 제외한 나머지 컬럼을 선택await db.select({ ...rest }).from(users);
import { serial, text, pgTable } from "drizzle-orm/pg-core";// user 테이블 스키마 정의export const user = pgTable("user", { id: serial("id").primaryKey(), name: text("name"), email: text("email"), password: text("password"), role: text("role").$type(),});
index.ts
schema.ts
import { getTableColumns } from "drizzle-orm";import { user } from "./schema";// user 테이블의 컬럼을 가져옴const { password, role, ...rest } = getTableColumns(user);// password와 role을 제외한 나머지 컬럼을 선택await db.select({ ...rest }).from(users);
import { int, text, mysqlTable } from "drizzle-orm/mysql-core";// user 테이블 스키마 정의export const user = mysqlTable("user", { id: int("id").primaryKey().autoincrement(), name: text("name"), email: text("email"), password: text("password"), role: text("role").$type(),});
index.ts
schema.ts
import { getTableColumns } from "drizzle-orm";import { user } from "./schema";// user 테이블의 컬럼을 가져옴const { password, role, ...rest } = getTableColumns(user);// password와 role을 제외한 나머지 컬럼을 선택await db.select({ ...rest }).from(users);
import { integer, text, sqliteView } from "drizzle-orm/sqlite-core";// user 테이블 스키마 정의export const user = pgTable("user", { id: integer("id").primaryKey({ autoIncrement: true }), name: text("name"), email: text("email"), password: text("password"), role: text("role").$type(),});
index.ts
schema.ts
import { getTableColumns } from "drizzle-orm";import { user } from "./schema";// user 테이블의 컬럼을 가져옴const { password, role, ...rest } = getTableColumns(user);// password와 role을 제외한 나머지 컬럼을 선택await db.select({ ...rest }).from(users);
import { int, text, mysqlTable } from "drizzle-orm/singlestore-core";// user 테이블 스키마 정의export const user = singlestoreTable("user", { id: int("id").primaryKey().autoincrement(), name: text("name"), email: text("email"), password: text("password"), role: text("role").$type(),});
테이블 정보 가져오기
PostgreSQL
MySQL
SQLite
SingleStore
import { getTableConfig, pgTable } from 'drizzle-orm/pg-core';export const table = pgTable(...);const { columns, // 컬럼 정보 indexes, // 인덱스 정보 foreignKeys, // 외래 키 정보 checks, // 체크 제약 조건 primaryKeys, // 기본 키 정보 name, // 테이블 이름 schema, // 스키마 정보} = getTableConfig(table);
import { getTableConfig, mysqlTable } from 'drizzle-orm/mysql-core';export const table = mysqlTable(...);const { columns, // 컬럼 정보 indexes, // 인덱스 정보 foreignKeys, // 외래 키 정보 checks, // 체크 제약 조건 primaryKeys, // 기본 키 정보 name, // 테이블 이름 schema, // 스키마 정보} = getTableConfig(table);
import { getTableConfig, sqliteTable } from 'drizzle-orm/sqlite-core';export const table = sqliteTable(...);const { columns, // 컬럼 정보 indexes, // 인덱스 정보 foreignKeys, // 외래 키 정보 checks, // 체크 제약 조건 primaryKeys, // 기본 키 정보 name, // 테이블 이름 schema, // 스키마 정보} = getTableConfig(table);
import { getTableConfig, mysqlTable } from 'drizzle-orm/singlestore-core';export const table = singlestoreTable(...);const { columns, // 컬럼 정보 indexes, // 인덱스 정보 checks, // 체크 제약 조건 primaryKeys, // 기본 키 정보 name, // 테이블 이름 schema, // 스키마 정보} = getTableConfig(table);
객체 타입 비교하기 (instanceof 대안)
Drizzle에서 특정 타입의 객체인지 확인하려면 is() 함수를 사용할 수 있습니다. 이 함수는 Drizzle에서 사용 가능한 모든 타입과 함께 사용할 수 있습니다.
IMPORTANT
항상 instanceof 대신 is()를 사용해야 합니다.
예제 몇 가지
import { Column, is } from 'drizzle-orm';if (is(value, Column)) { // value의 타입이 Column으로 좁혀집니다}
Mock Driver
이 API는 Drizzle 테스트에서 내부적으로 사용하던 drizzle({} as any) API를 대체하는 것입니다. 이전에는 외부 개발자에게 거의 권장하지 않았지만, 이제는 제대로 된 API를 구축하고 공개하기로 결정했습니다. 모든 drizzle 드라이버는 이제 drizzle.mock()을 제공합니다:
import { drizzle } from "drizzle-orm/node-postgres";const db = drizzle.mock();
필요한 경우 타입을 위해 스키마를 제공할 수도 있습니다:
import { drizzle } from "drizzle-orm/node-postgres";import * as schema from "./schema"const db = drizzle.mock({ schema });