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