mcpField
U
using-drizzle-queries

using-drizzle-queries

github.com/andrelandgrafData & databases23135 installsUpdated 20w ago
Repository

About using-drizzle-queries

using-drizzle-queries is a reference skill for writing type-safe database queries with Drizzle ORM. It covers common data operations, relational queries, and the steps for adding tables and migrations.

Key features

  1. 01Select, insert, update, and delete queries
  2. 02Relational query patterns
  3. 03Table schema creation
  4. 04Schema registration and migrations

Use cases

  1. 01Write filtered database queries
  2. 02Fetch related records with relations
  3. 03Add a table to a project schema
  4. 04Generate and run database migrations

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/andrelandgraf/fullstackrecipes --skill using-drizzle-queries

After installing, type/using-drizzle-queriesin Claude Code to confirm it loaded.

Details

From the project README

Working with Drizzle

Write type-safe database queries with Drizzle ORM. Covers select, insert, update, delete, relational queries, and adding new tables.

Implement Working with Drizzle

Write type-safe database queries with Drizzle ORM. Covers select, insert, update, delete, relational queries, and adding new tables.

See:


Writing Queries

Use Drizzle's query API for type-safe database operations:

import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq, desc } from "drizzle-orm";

// Select all
const allChats = await db.select().from(chats);

// Select with filter
const userChats = await db
  .select()
  .from(chats)
  .where(eq(chats.userId, userId))
  .orderBy(desc(chats.createdAt));

// Select single record
const chat = await db
  .select()
  .from(chats)
  .where(eq(chats.id, chatId))
  .limit(1)
  .then((rows) => rows[0]);
Inserting Data
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";

// Insert single record
const [newChat] = await db
  .insert(chats)
  .values({
    userId,
    title: "New Chat",
  })
  .returning();

// Insert multiple records
await db.insert(messages).values([
  { chatId, role: "user", content: "Hello" },
  { chatId, role: "assistant", content: "Hi there!" },
]);
Updating Data
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq } from "drizzle-orm";

await db
  .update(chats)
  .set({ title: "Updated Title" })
  .where(eq(chats.id, chatId));
Deleting Data
import { db } from "@/lib/db/client";
import { chats } from "@/lib/chat/schema";
import { eq } from "drizzle-orm";

await db.delete(chats).where(eq(chats.id, chatId));
Using Relational Queries

For queries with relations, use the query API:

import { db } from "@/lib/db/client";

const chatWithMessages = await db.query.chats.findFirst({
  where: eq(chats.id, chatId),
  with: {
    messages: {
      orderBy: (messages, { asc }) => [asc(messages.createdAt)],
    },
  },
});
Adding New Tables
  1. Create the schema in the feature's library folder:
// src/lib/feature/schema.ts
import { pgTable, text, uuid, timestamp } from "drizzle-orm/pg-core";

export const items = pgTable("items", {
  id: uuid("id").primaryKey().defaultRandom(),
  name: text("name").notNull(),
  createdAt: timestamp("created_at").defaultNow().notNull(),
});
  1. Import the schema in src/lib/db/client.ts:
import * as itemSchema from "@/lib/feature/schema";

const schema = {
  ...authSchema,
  ...chatSchema,
  ...itemSchema,
};
  1. Generate and run migrations:
bun run db:generate
bun run db:migrate

References

Comments

Markdown supported