使用 Drizzle ORM 模式构建类型安全的数据库查询。
Schema Definition是一项面向实际任务的技能,主要用于从chema文件中输出每个表格 – 如果表格没有导出, 查询会无声失败;使用 $inferSelect 查询返回类型, 使用 $inferInsert 插入输入 – 它们不同( sele)。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
$inferSelect 定义查询返回类型,使用 $inferInsert 定义插入输入类型——二者语义不同($inferSelect 包含已填充的默认值,$inferInsert 中可选字段保持可选)relations() 必须在独立调用中定义,不可内联于表定义中——Drizzle 明确分离 schema 与关系定义where: eq(users.id, 5),而非 where: { id: 5 }——Prisma 风格语法不适用and() / or() 组合多个条件:where: and(eq(users.active, true), gt(users.age, 18))with:)时使用 db.query.users.findMany();执行类 SQL 查询时使用 db.select().from(users)——混用二者将导致类型错误drizzle-kit push 仅限开发环境使用(具有破坏性);生产环境应使用 drizzle-kit generate 生成迁移文件,再执行 drizzle-kit migratedrizzle.config.ts 中设置 strict: true,可在问题进入生产环境前捕获 schema 偏移(schema drift)pgTable,导入自 drizzle-orm/pg-coremysqlTable,导入自 drizzle-orm/mysql-coresqliteTable,导入自 drizzle-orm/sqlite-coremysql-core)虽可通过编译,但在运行时会触发难以排查的错误db.transaction(async (tx) => {}) 中——Drizzle 不会自动批处理查询.prepare() 方法——可跳过每次查询构建的开销findMany() 和 select() 显式添加 .limit()——无默认限制将导致全表扫描await 将返回 Promise 而非实际结果——若忽略返回值,TypeScript 无法检测该错误returning() 才能获取插入/更新后的行数据;否则仅返回 { rowCount }jsonb(),MySQL 使用 json()——函数误用将导致序列化异常相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.3万人学习
共49课时 | 82.7万人学习
最新文章