跳到正文
cccskills
免费在 GitHub 公开

drizzle-orm-d1

| Type-safe ORM for Cloudflare D1 databases using Drizzle. Use when: building D1 database schemas, writing type-safe SQL queries, managing migrations with Drizzle Kit, defining table relations, implementing prepared statements, using D1 batch API, or encountering D1_ERROR, transaction errors, foreign key constraint failures, or schema inference issues.

中文简介正在准备中。当前显示原文说明。

集成工具Cloudflare
查看安装方法

包含的文件(20)

  • SKILL.md9.2 KB
  • references/common-errors.md5.3 KB
  • references/error-catalog.md7.9 KB
  • references/links-to-official-docs.md1.8 KB
  • references/migration-workflow.md2.7 KB
  • references/query-builder-api.md3.9 KB
  • references/schema-patterns.md3.4 KB
  • references/wrangler-setup.md2.7 KB
  • scripts/check-versions.sh1017 B
  • templates/basic-queries.ts7.5 KB
  • templates/basic-schema.ts2.9 KB
  • templates/client.ts2.2 KB
  • templates/cloudflare-worker-integration.ts7.7 KB
  • templates/drizzle.config.ts2.2 KB
  • templates/migrations/0001_example.sql2.1 KB
  • templates/package.json1.1 KB
  • templates/prepared-statements.ts7.3 KB
  • templates/relations-queries.ts6.8 KB
  • templates/schema.ts6.5 KB
  • templates/transactions.ts6.8 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Drizzle ORM for Cloudflare D1

Status: Production Ready ✅ Last Updated: 2025-12-14 Latest Version: drizzle-orm@0.45.2, drizzle-kit@0.31.10 Dependencies: cloudflare-d1, cloudflare-worker-base


Quick Start (10 Minutes)

1. Install Drizzle

bun add drizzle-orm drizzle-kit

2. Configure Drizzle Kit

Create drizzle.config.ts:

import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  schema: './src/db/schema.ts',
  out: './migrations',
  dialect: 'sqlite',          // MANDATORY since drizzle-kit 0.21 (D1 = sqlite)
  driver: 'd1-http',          // D1 HTTP driver for remote migrations/Studio
  dbCredentials: {            // MANDATORY: drizzle-kit 0.30+ tightened zod validation
    accountId: process.env.CLOUDFLARE_ACCOUNT_ID!,
    databaseId: process.env.CLOUDFLARE_DATABASE_ID!,
    token: process.env.CLOUDFLARE_D1_TOKEN!,
  },
});

drizzle-kit 0.30/0.31 note: dialect and dbCredentials are now strictly validated. A config that omits dialect or uses the old connectionString/ uri keys will fail validation. For D1 use dialect: 'sqlite' + driver: 'd1-http' with accountId/databaseId/token (or wrangler-based credentials). The runtime migrate() signature in drizzle-orm/<driver>/migrator is unchanged from 0.36 → 0.45 (it changes only in 1.0-beta, which is out of scope for ^0.45).

3. Define Schema

Create src/db/schema.ts:

import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
import { relations } from 'drizzle-orm';

export const users = sqliteTable('users', {
  id: integer('id').primaryKey({ autoIncrement: true }),
  email: text('email').notNull().unique(),
  name: text('name').notNull(),
  createdAt: integer('created_at', { mode: 'timestamp' }).$defaultFn(() => new Date()),
});

export const posts = sqliteTable('posts', {
  id: integer('id').primaryKey({ autoIncrement: true }),
  title: text('title').notNull(),
  content: text('content').notNull(),
  authorId: integer('author_id')
    .notNull()
    .references(() => users.id, { onDelete: 'cascade' }),
});

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

4. Generate & Apply Migrations

bunx drizzle-kit generate                           # Generate SQL
bunx wrangler d1 migrations apply my-database --local   # Apply local
bunx wrangler d1 migrations apply my-database --remote  # Apply prod

5. Query in Worker

import { drizzle } from 'drizzle-orm/d1';
import { users } from './db/schema';
import { eq } from 'drizzle-orm';

export default {
  async fetch(request: Request, env: { DB: D1Database }): Promise<Response> {
    const db = drizzle(env.DB);
    const allUsers = await db.select().from(users).all();
    return Response.json(allUsers);
  },
};

Critical Rules

Always Do

RuleWhy
Use drizzle-kit generate for migrationsNever write SQL manually
Test migrations locally first--local before --remote
Use .get() for single resultsReturns first row or undefined
Use db.batch() for transactionsD1 doesn't support SQL BEGIN/COMMIT
Use integer with mode: 'timestamp' for datesD1 has no native date type
Use .$defaultFn() for dynamic defaultsNot .default() for functions

Never Do

RuleWhy
Use SQL BEGIN TRANSACTIOND1 requires batch API (Error #1)
Mix drizzle-kit migrate and wrangler applyUse Wrangler only
Use drizzle-kit push for productionUse generate + apply
Commit credentials in drizzle.config.tsUse env vars
Use .default() for function callsUse .$defaultFn() instead

Top 5 Critical Errors

#ErrorSolution
1D1_ERROR: Cannot use BEGIN TRANSACTIONUse db.batch([...]) instead of db.transaction()
2FOREIGN KEY constraint failedDefine cascading: .references(() => users.id, { onDelete: 'cascade' })
3env.DB is undefinedEnsure binding in wrangler.jsonc matches env.DB
4No such module "wrangler"Use import { drizzle } from 'drizzle-orm/d1'
5Type instantiation excessively deepUse InferSelectModel<typeof users> for explicit types

See: references/error-catalog.md for all 12 errors with complete solutions.


Common Patterns Summary

PatternUse CaseTemplate
CRUD OperationsBasic database operationstemplates/basic-queries.ts
Relations & JoinsNested queries, manual joinstemplates/relations-queries.ts
Batch OperationsTransactions (D1 batch API)templates/transactions.ts
Schema DesignNaming, indexes, soft deletesreferences/schema-patterns.md

Configuration Summary

FilePurposeTemplate
drizzle.config.tsDrizzle Kit configurationtemplates/drizzle.config.ts
wrangler.jsoncD1 binding setupreferences/wrangler-setup.md
package.jsonnpm scripts for migrationstemplates/package.json

npm scripts:

{
  "db:generate": "drizzle-kit generate",
  "db:migrate:local": "wrangler d1 migrations apply my-database --local",
  "db:migrate:remote": "wrangler d1 migrations apply my-database --remote"
}

Migration Workflow

StepCommandNotes
1. Edit schemaEdit src/db/schema.tsMake changes
2. Generatenpm run db:generateCreates SQL migration
3. Test localnpm run db:migrate:localVerify locally
4. Deploy codenpm run deployPush to Cloudflare
5. Apply prodnpm run db:migrate:remoteApply migration

See: references/migration-workflow.md for complete workflow.


TypeScript Type Inference

import { InferSelectModel, InferInsertModel } from 'drizzle-orm';
import { users } from './db/schema';

export type User = InferSelectModel<typeof users>;
export type NewUser = InferInsertModel<typeof users>;

When to Load References

ReferenceLoad When...
references/error-catalog.mdDebugging D1 errors, transaction failures, binding issues
references/schema-patterns.mdDesigning schemas, naming conventions, indexes, soft deletes
references/migration-workflow.mdSetting up or troubleshooting migrations
references/query-builder-api.mdComplex queries, operators, joins syntax
references/wrangler-setup.mdConfiguring wrangler.jsonc for D1
references/common-errors.mdQuick error lookup

Bundled Resources

Templates: basic-schema.ts, basic-queries.ts, transactions.ts, relations-queries.ts, prepared-statements.ts, drizzle.config.ts, package.json

References: error-catalog.md, schema-patterns.md, migration-workflow.md, query-builder-api.md, wrangler-setup.md, common-errors.md, links-to-official-docs.md


Dependencies

{
  "dependencies": {
    "drizzle-orm": "^0.45.2"
  },
  "devDependencies": {
    "drizzle-kit": "^0.31.10"
  }
}

Secure Installation

When installing Drizzle ORM and D1 driver packages, follow supply chain security best practices:

  • Block post-install scripts — npm config set ignore-scripts true (or Bun: disabled by default)
  • Cooldown period — Wait 7 days for new package versions to be vetted by the community
  • Audit before installing — Run socket package score npm <pkg> or use socket npm install <pkg> to check packages

Load the dependency-upgrade skill for full security configuration including Socket CLI integration, cooldown setup, lockfile validation, and CI enforcement.

Official Documentation


Token Savings: ~65% (comprehensive patterns in references) Error Prevention: 100% (all 12 documented issues) Ready for production! ✅

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

100+ animated React components (Aceternity UI) for Next.js with Tailwind. Use for hero sections, parallax, 3D effects, or encountering animation, shadcn CLI integration errors.

中文简介正在准备中。当前显示原文说明。

secondsky/claude-skills2312026年10月19日 更新

Secure API authentication with JWT, OAuth 2.0, API keys. Use for authentication systems, third-party integrations, service-to-service communication, or encountering token management, security headers, auth flow errors.

中文简介正在准备中。当前显示原文说明。

secondsky/claude-skills2312026年10月19日 更新

Creates comprehensive API changelogs documenting breaking changes, deprecations, and migration strategies for API consumers. Use when managing API versions, communicating breaking changes, or creating upgrade guides.

中文简介正在准备中。当前显示原文说明。

secondsky/claude-skills2312026年10月19日 更新

Verifies API contracts between services using consumer-driven contracts, schema validation, and tools like Pact. Use when testing microservices communication, preventing breaking changes, or validating OpenAPI specifications.

中文简介正在准备中。当前显示原文说明。

secondsky/claude-skills2312026年10月19日 更新

Master REST and GraphQL API design principles to build intuitive, scalable, and maintainable APIs that delight developers. Use when designing new APIs, reviewing API specifications, or establishing API design standards.

中文简介正在准备中。当前显示原文说明。

secondsky/claude-skills2312026年10月19日 更新

Implements standardized API error responses with proper status codes, logging, and user-friendly messages. Use when building production APIs, implementing error recovery patterns, or integrating error monitoring services.

中文简介正在准备中。当前显示原文说明。

secondsky/claude-skills2312026年10月19日 更新

查看 secondsky 的全部技能

报告此技能的问题