Objection.js(搭配Knex)如何插入全默认值记录?
使用Objection.js + Knex实现PostgreSQL默认值插入
以下是几种实现INSERT INTO public.myTable DEFAULT VALUES;功能的实用方法:
方法1:直接执行原生SQL(最精准匹配需求)
既然你要的就是原生SQL的效果,直接通过Knex的raw方法执行是最直接的方式,还能通过RETURNING *获取插入后的完整记录(包括自增ID):
// 假设你的模型类是MyModel const insertResult = await MyModel.knex().raw('INSERT INTO public.myTable DEFAULT VALUES RETURNING *'); const newRecord = insertResult.rows[0];
方法2:使用Objection.js的ORM插入语法
如果想保持ORM的代码风格,直接传入空对象执行插入即可,数据库会自动使用schema定义的字段默认值:
const newRecord = await MyModel.query().insert({});
注意事项
- 确保你的数据库表字段确实定义了默认值(比如
DEFAULT now()或者DEFAULT ''等),否则空对象插入会触发数据库的非空约束报错。 - 如果你的模型的
jsonSchema中标记了某些字段为required,但数据库层面有默认值,可能需要调整模型验证规则(比如移除required,或者设置模型的skipValidation选项),避免ORM层面的验证拦截插入操作:const newRecord = await MyModel.query().insert({}).skipValidation();
内容的提问来源于stack exchange,提问作者salouri
相关产品推荐
相关产品推荐

