Skip to main content 首页 创作者 secondsky claude-skills drizzle-orm-d1
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.
跳到安装 Skills Marketplace 发现并探索由社区构建的 Agent Skills
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/secondsky/claude-skills --skill drizzle-orm-d1命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
下载 Zip 下载中... 同仓库更多 Skills Use when reworking a change to prevent tech debt, or auditing existing debt to categorize, score, and prioritize the refactor backlog.
Discover and reduce task unknowns — blindspots, missing context, and unknown unknowns — before committing to a plan, implementation, review, or merge.
MUI Base UI unstyled React components with Floating UI. Use for accessible components, Radix UI migration, render props API, or encountering positioning, popup, v1.0 rc / pre-GA issues.
name drizzle-orm-d1 description | 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. metadata {"keywords":["drizzle orm","drizzle d1","type-safe sql","drizzle schema","drizzle migrations","drizzle kit","orm cloudflare","d1 orm","drizzle typescript","drizzle relations","drizzle transactions","drizzle query builder","schema definition","prepared statements","drizzle batch","migration management","relational queries","drizzle joins","D1_ERROR","BEGIN TRANSACTION d1","foreign key constraint","migration failed","schema not found","d1 binding error","schema design","database indexes","soft deletes","uuid primary keys","enum constraints","performance optimization","naming conventions","schema testing"]} license MIT
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:
{ defineConfig } ;
({
: ,
: ,
: ,
: ,
: {
: process. . !,
: process. . !,
: process. . !,
},
});
import
from
'drizzle-kit'
export
default
defineConfig
schema
'./src/db/schema.ts'
out
'./migrations'
dialect
'sqlite'
driver
'd1-http'
dbCredentials
accountId
env
CLOUDFLARE_ACCOUNT_ID
databaseId
env
CLOUDFLARE_DATABASE_ID
token
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 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
bunx wrangler d1 migrations apply my-database --local
bunx wrangler d1 migrations apply my-database --remote
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 Rule Why Use drizzle-kit generate for migrations Never write SQL manually Test migrations locally first --local before --remoteUse .get() for single results Returns first row or undefined Use db.batch() for transactions D1 doesn't support SQL BEGIN/COMMIT Use integer with mode: 'timestamp' for dates D1 has no native date type Use .$defaultFn() for dynamic defaults Not .default() for functions
Never Do Rule Why Use SQL BEGIN TRANSACTION D1 requires batch API (Error #1) Mix drizzle-kit migrate and wrangler apply Use Wrangler only Use drizzle-kit push for production Use generate + apply Commit credentials in drizzle.config.ts Use env vars Use .default() for function calls Use .$defaultFn() instead
Top 5 Critical Errors # Error Solution 1 D1_ERROR: Cannot use BEGIN TRANSACTIONUse db.batch([...]) instead of db.transaction() 2 FOREIGN KEY constraint failedDefine cascading: .references(() => users.id, { onDelete: 'cascade' }) 3 env.DB is undefinedEnsure binding in wrangler.jsonc matches env.DB 4 No such module "wrangler"Use import { drizzle } from 'drizzle-orm/d1' 5 Type instantiation excessively deepUse InferSelectModel<typeof users> for explicit types
See : references/error-catalog.md for all 12 errors with complete solutions.
Common Patterns Summary Pattern Use Case Template CRUD Operations Basic database operations templates/basic-queries.tsRelations & Joins Nested queries, manual joins templates/relations-queries.tsBatch Operations Transactions (D1 batch API) templates/transactions.tsSchema Design Naming, indexes, soft deletes references/schema-patterns.md
Configuration Summary File Purpose Template drizzle.config.tsDrizzle Kit configuration templates/drizzle.config.tswrangler.jsoncD1 binding setup references/wrangler-setup.mdpackage.jsonnpm scripts for migrations templates/package.json
{
"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 Step Command Notes 1. Edit schema Edit src/db/schema.ts Make changes 2. Generate npm run db:generateCreates SQL migration 3. Test local npm run db:migrate:localVerify locally 4. Deploy code npm run deployPush to Cloudflare 5. Apply prod npm 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 Reference Load 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! ✅