Introduccion a Drizzle ORM - ORM ligero para TypeScript

Intermedio | 45 min de lectura | 2025.12.10

Lo que aprenderas en este tutorial

✓ Configuracion de Drizzle
✓ Definicion de esquemas
✓ Migraciones
✓ Operaciones CRUD
✓ Relaciones

Step 1: Configuracion

npm install drizzle-orm postgres
npm install -D drizzle-kit

Step 2: Definicion del esquema

// src/db/schema.ts
import { pgTable, serial, text, timestamp, integer } from 'drizzle-orm/pg-core';

export const users = pgTable('users', {
  id: serial('id').primaryKey(),
  name: text('name').notNull(),
  email: text('email').notNull().unique(),
  createdAt: timestamp('created_at').defaultNow(),
});

export const posts = pgTable('posts', {
  id: serial('id').primaryKey(),
  title: text('title').notNull(),
  content: text('content'),
  authorId: integer('author_id').references(() => users.id),
  createdAt: timestamp('created_at').defaultNow(),
});

Step 3: Conexion a la base de datos

// src/db/index.ts
import { drizzle } from 'drizzle-orm/postgres-js';
import postgres from 'postgres';
import * as schema from './schema';

const client = postgres(process.env.DATABASE_URL!);
export const db = drizzle(client, { schema });

Step 4: Migraciones

// drizzle.config.ts
import type { Config } from 'drizzle-kit';

export default {
  schema: './src/db/schema.ts',
  out: './drizzle',
  driver: 'pg',
  dbCredentials: {
    connectionString: process.env.DATABASE_URL!,
  },
} satisfies Config;
# Generar migracion
npx drizzle-kit generate:pg

# Ejecutar migracion
npx drizzle-kit push:pg

# Drizzle Studio
npx drizzle-kit studio

Step 5: Operaciones CRUD

import { db } from './db';
import { users, posts } from './db/schema';
import { eq, desc } from 'drizzle-orm';

// Create
const newUser = await db.insert(users).values({
  name: 'Alice',
  email: 'alice@example.com',
}).returning();

// Read
const allUsers = await db.select().from(users);

const user = await db.select()
  .from(users)
  .where(eq(users.id, 1));

// Update
await db.update(users)
  .set({ name: 'Alice Updated' })
  .where(eq(users.id, 1));

// Delete
await db.delete(users).where(eq(users.id, 1));

Step 6: Query Builder

// Consulta con condiciones
const activePosts = await db.select()
  .from(posts)
  .where(eq(posts.authorId, userId))
  .orderBy(desc(posts.createdAt))
  .limit(10);

// JOIN
const postsWithAuthors = await db.select({
  post: posts,
  author: users,
})
.from(posts)
.leftJoin(users, eq(posts.authorId, users.id));

// Agregacion
import { count, avg } from 'drizzle-orm';

const stats = await db.select({
  total: count(),
})
.from(posts);

Step 7: Consultas con relaciones

// Definir relaciones en schema.ts
import { relations } from 'drizzle-orm';

export const usersRelations = relations(users, ({ many }) => ({
  posts: many(posts),
}));

export const postsRelations = relations(posts, ({ one }) => ({
  author: one(users, {
    fields: [posts.authorId],
    references: [users.id],
  }),
}));

// Consulta
const usersWithPosts = await db.query.users.findMany({
  with: {
    posts: true,
  },
});

Resumen

Drizzle ORM es un ORM ligero y con tipado seguro. Su API cercana a SQL tiene una curva de aprendizaje baja y las migraciones son simples.

← Volver a la lista