[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EEVTQ54JPQ3E6ZP4N8C01K":3,"skill-same:01M6EEVTQ54JPQ3E6ZP4N8C01K":48},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":23,"frontMatter":24,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":30,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":32,"updatedAt":33,"install":34,"resources":47},"01M6EEVTQ54JPQ3E6ZP4N8C01K","drizzle-orm",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fdrizzle-orm\u002FSKILL.md",[],[18,19,20],"orm","drizzle orm","drizzle","2026-11-10 10:12:30",false,"# Drizzle ORM — TypeScript SQL That Feels Like SQL\n\nYou are an expert in Drizzle ORM, the lightweight TypeScript ORM that maps directly to SQL. You help developers write type-safe database queries that look like SQL (not a new query language), generate migrations from schema changes, and deploy to serverless environments with zero overhead — supporting Postgres, MySQL, SQLite, Turso, Neon, PlanetScale, and Cloudflare D1.\n\n## Core Capabilities\n\n### Schema Definition\n\n```typescript\n\u002F\u002F db\u002Fschema.ts\nimport { pgTable, text, integer, boolean, timestamp, serial, uuid, varchar, jsonb, index, uniqueIndex } from \"drizzle-orm\u002Fpg-core\";\nimport { relations } from \"drizzle-orm\";\n\nexport const users = pgTable(\"users\", {\n  id: uuid(\"id\").primaryKey().defaultRandom(),\n  name: varchar(\"name\", { length: 255 }).notNull(),\n  email: varchar(\"email\", { length: 255 }).notNull(),\n  role: varchar(\"role\", { length: 20 }).notNull().default(\"user\"),\n  metadata: jsonb(\"metadata\").$type\u003C{ plan: string; seats: number }>(),\n  createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n}, (table) => ({\n  emailIdx: uniqueIndex(\"email_idx\").on(table.email),\n}));\n\nexport const posts = pgTable(\"posts\", {\n  id: serial(\"id\").primaryKey(),\n  title: varchar(\"title\", { length: 500 }).notNull(),\n  content: text(\"content\"),\n  published: boolean(\"published\").default(false).notNull(),\n  authorId: uuid(\"author_id\").references(() => users.id).notNull(),\n  createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n}, (table) => ({\n  authorIdx: index(\"author_idx\").on(table.authorId),\n  publishedIdx: index(\"published_idx\").on(table.published, table.createdAt),\n}));\n\n\u002F\u002F Relations (for query builder)\nexport const usersRelations = relations(users, ({ many }) => ({\n  posts: many(posts),\n}));\n\nexport const postsRelations = relations(posts, ({ one }) => ({\n  author: one(users, { fields: [posts.authorId], references: [users.id] }),\n}));\n```\n\n### Queries\n\n```typescript\nimport { drizzle } from \"drizzle-orm\u002Fnode-postgres\";\nimport { eq, and, gte, desc, sql, like, count } from \"drizzle-orm\";\nimport * as schema from \".\u002Fschema\";\n\nconst db = drizzle(pool, { schema });\n\n\u002F\u002F Select — reads like SQL\nconst publishedPosts = await db.select()\n  .from(posts)\n  .where(and(\n    eq(posts.published, true),\n    gte(posts.createdAt, new Date(\"2026-01-01\")),\n  ))\n  .orderBy(desc(posts.createdAt))\n  .limit(20);\n\n\u002F\u002F Join\nconst postsWithAuthors = await db.select({\n  title: posts.title,\n  authorName: users.name,\n  authorEmail: users.email,\n})\n  .from(posts)\n  .innerJoin(users, eq(posts.authorId, users.id))\n  .where(eq(posts.published, true));\n\n\u002F\u002F Relational queries (Prisma-like)\nconst usersWithPosts = await db.query.users.findMany({\n  with: { posts: { where: eq(posts.published, true), limit: 5 } },\n  where: eq(users.role, \"admin\"),\n});\n\n\u002F\u002F Insert\nconst [newUser] = await db.insert(users)\n  .values({ name: \"Alice\", email: \"alice@example.com\" })\n  .returning();\n\n\u002F\u002F Upsert\nawait db.insert(users)\n  .values({ id: userId, name: \"Alice\", email: \"alice@example.com\" })\n  .onConflictDoUpdate({ target: users.email, set: { name: \"Alice Updated\" } });\n\n\u002F\u002F Aggregate\nconst [stats] = await db.select({\n  total: count(),\n  published: count(sql`CASE WHEN ${posts.published} THEN 1 END`),\n}).from(posts);\n\n\u002F\u002F Transaction\nawait db.transaction(async (tx) => {\n  const [post] = await tx.insert(posts).values({ title: \"New\", authorId: userId }).returning();\n  await tx.insert(notifications).values({ userId, message: `Post ${post.id} created` });\n});\n```\n\n### Migrations\n\n```bash\nnpx drizzle-kit generate                   # Generate migration from schema diff\nnpx drizzle-kit push                       # Push schema directly (prototyping)\nnpx drizzle-kit migrate                    # Apply migrations\nnpx drizzle-kit studio                     # Visual data browser\n```\n\n## Installation\n\n```bash\nnpm install drizzle-orm\nnpm install -D drizzle-kit\n# + driver: pg | mysql2 | better-sqlite3 | @libsql\u002Fclient | @neondatabase\u002Fserverless\n```\n\n## Best Practices\n\n1. **SQL-like syntax** — Drizzle queries map 1:1 to SQL; if you know SQL, you know Drizzle\n2. **Zero overhead** — No query engine at runtime; generates SQL strings directly; serverless-friendly\n3. **Schema as code** — TypeScript schema = migration source; `drizzle-kit generate` diffs and creates SQL\n4. **Relational queries** — Use `db.query` for Prisma-like nested includes; `db.select` for raw SQL control\n5. **Serverless drivers** — Use `@neondatabase\u002Fserverless`, `@libsql\u002Fclient`, D1 for edge\u002Fserverless\n6. **Indexes** — Define in table callback; Drizzle generates CREATE INDEX in migrations\n7. **Type inference** — `typeof users.$inferSelect` and `$inferInsert` for row types; no manual type definitions\n8. **Prepared statements** — Use `.prepare()` for repeated queries; avoids re-parsing on every call\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fdrizzle-orm",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":35,"prompt":45,"zipAvailable":46},[36,39,42],{"tool":37,"command":38},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill drizzle-orm",{"tool":40,"command":41},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill drizzle-orm",{"tool":43,"command":44},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill drizzle-orm","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fdrizzle-orm\u002FSKILL.md",true,[],[49,63,73,82,88,95],{"skillNo":50,"name":51,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":59,"publishedAt":21},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[54],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[60,61,62],"model","model hierarchy","model hierarchy skill",{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":69,"publishedAt":21},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[68],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[70,71,72],"MCP","zoom","zoom mcp",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":21},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[79,80,81,71],"sdk","zoom apps sdk","apps",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":21},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[84],{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":21},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[93],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},[90],{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":21},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[97]]