Communitygithub.com

Drizzle ORM

Definição de esquemas Drizzle, push vs migrate, consultas type-safe, relações, transações e declarações preparadas.

O que é Drizzle ORM?

Esta skill fornece as melhores práticas e padrões para usar o Drizzle ORM no desenvolvimento de aplicações. Ela cobre desde a definição de esquemas com `pgTable()`, `mysqlTable()` ou `sqliteTable()` até a diferenciação entre `drizzle-kit push` para iteração rápida em desenvolvimento e `drizzle-kit generate` + `migrate` para migrações rastreáveis em produção. A skill também demonstra consultas type-safe com inferência completa do TypeScript, definição de relações usando o helper `relations()` (com `one()` e `many()`), uso de declarações preparadas para otimização de caminhos críticos, transações com escopo de callback, e criação de índices para melhor performance em `where` e `orderBy`. É direcionada para agentes de IA que desenvolvem com bancos de dados PostgreSQL, MySQL ou SQLite, e inclui exemplos de código práticos para implementação imediata.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/YepAPI/skills/tree/HEAD/skills/drizzle-orm

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Drizzle ORM faz?

Regras

  • Definição de esquema: pgTable() / mysqlTable() / sqliteTable() em src/db/schema.ts
  • Desenvolvimento: drizzle-kit push para iteração rápida — nenhum arquivo de migração necessário
  • Produção: drizzle-kit generate + drizzle-kit migrate para histórico de migrações rastreável
  • Consultas type-safe: db.select().from(users).where(eq(users.email, email)) — inferência completa do TypeScript
  • Relações: defina com o helper relations() — one() e many() para consultas relacionais com db.query
  • Declarações preparadas: db.select().from(users).where(eq(users.id, sql.placeholder("id"))).prepare() — reutilize em caminhos críticos
  • Transações: db.transaction(async (tx) => { ... }) — use tx e não db dentro do callback
  • Índices: defina inline com .index() ou na configuração da tabela — adicione em colunas usadas em where e orderBy
  • Drizzle Studio: npx drizzle-kit studio para navegador visual de banco de dados durante o desenvolvimento

Padrões

// schema.ts
import { pgTable, text, timestamp, uuid, integer } from "drizzle-orm/pg-core";
import { relations } from "drizzle-orm";

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

export const posts = pgTable("posts", {
  id: uuid("id").primaryKey().defaultRandom(),
  title: text("title").notNull(),
  authorId: uuid("author_id").references(() => users.id).notNull(),
});

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 com relações
const result = await db.query.users.findFirst({
  where: eq(users.id, userId),
  with: { posts: true },
});

Evitar

  • drizzle-kit push em produção — use generate + migrate para migrações rastreáveis
  • SQL puro quando a API do Drizzle cobre — use o template tag sql apenas para expressões complexas
  • Esquecer as definições de relations() — sem elas, consultas relacionais com db.query não funcionarão
  • Consultas N+1 — use with em db.query para unir relações em uma única consulta
  • Faltar índices em chaves estrangeiras e colunas filtradas — Drizzle não os cria automaticamente

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

YepAPI/skills

WCAG 2.1 AA — semantic HTML, keyboard navigation, screen readers.

YepAPI/skills

Experiment setup, variant splitting, statistical significance, and feature flag integration.

YepAPI/skills

CRUD generators, data tables, user management, role-based access, and bulk operations.

YepAPI/skills

Monitor what ChatGPT and Gemini say about your brand using YepAPI.

YepAPI/skills

Queue workers with BullMQ/Inngest/Trigger.dev, job retries, dead letter queues, concurrency.

YepAPI/skills

Commander.js, interactive prompts with Clack, spinners, colors, config files, exit codes, and npm publishing.

YepAPI/skills

cmdk integration, Cmd+K trigger, fuzzy search, grouped actions, keyboard navigation, and dynamic action registration.

YepAPI/skills

Content planning with trend and sentiment data from YepAPI.

YepAPI/skills

Content calendar, keyword-driven planning, and content briefs.

YepAPI/skills

Theme switching with CSS variables, system preference detection, next-themes, and persistence.

YepAPI/skills

Threaded comments, @mentions, reactions, moderation queue, optimistic UI, and cursor pagination.

YepAPI/skills

Competitive analysis between domains using YepAPI.

YepAPI/skills

Layout grids, KPI cards, data tables with sorting/filtering, sidebar navigation, and responsive breakpoints.

YepAPI/skills

Data encryption — TLS everywhere, AES-256-GCM for PII, bcrypt passwords, encrypted backups.

YepAPI/skills

Chart patterns with Recharts/Nivo/D3, responsive containers, color scales, and accessibility.

YepAPI/skills

Upload handling, resize/compress, CDN delivery, blur placeholders, and next/image patterns.

YepAPI/skills

Local business and Google Maps research using YepAPI.

YepAPI/skills

Cursor-based pagination, IntersectionObserver, virtualized lists with @tanstack/react-virtual, and scroll position restoration.

YepAPI/skills

Tenant isolation (row-level vs schema), subdomain routing, per-tenant config, and data partitioning.

YepAPI/skills

Chat UI components, streaming responses with AI SDK, context window management, and RAG patterns.

Habilidades Relacionadas