We use cookies to understand how the site is used and to display ads. Analytics and advertising only run after you accept. You can change your choice anytime. Privacy policy

Skip to content
devvkit
$devvkit learn --librarie drizzle-orm-guide

Drizzle ORM Guide

[orm][database][typescript]
JavaScript / TypeScript
Install
npm install drizzle-orm @libsql/client
npm install -D drizzle-kit
npx drizzle-kit init

Drizzle is a thin SQL-like query builder. Define schema with TypeScript types, not a DSL.

Every query maps directly to SQL. No hidden ORM magic or N+1 surprises.

drizzle-kit generates clean, human-readable SQL migration files.

Schema Definition

Define table· SQLite table schema.
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
export const users = sqliteTable('users', {
  id: integer('id').primaryKey({autoIncrement: true}),
  name: text('name').notNull(),
  email: text('email').unique().notNull(),
});
Define relation· Link tables.
import { relations } from 'drizzle-orm';
export const usersRelations = relations(users, ({ many }) => ({ posts: many(posts) }));

Queries

SELECT· Query with conditions.
import { eq, and, gte } from 'drizzle-orm';
const result = await db.select().from(users).where(and(eq(users.role,'admin'),gte(users.age,18)));
SELECT columns· Specific fields.
await db.select({id:users.id, name:users.name}).from(users);

Relations

JOIN· Join tables.
await db.select().from(users).leftJoin(posts, eq(users.id, posts.authorId));

Mutations

INSERT· Insert and return.
await db.insert(users).values({name:'Alice', email:'alice@example.com'}).returning();
UPDATE· Modify rows.
await db.update(users).set({name:'Updated'}).where(eq(users.id, 1));
DELETE· Remove rows.
await db.delete(users).where(eq(users.id, 1));

Migrations

Generate migration· Create SQL file.
npx drizzle-kit generate
Apply migration· Run pending migrations.
npx drizzle-kit migrate

Advanced

Prepared statement· Reuse query plan.
const stmt = db.select().from(users).where(eq(users.role,'admin')).prepare();
const admins = await stmt.execute();