pgp.as.format()中的'default'选项

我需要使用default选项为缺少的对象字段格式化SQL查询。我可以与外部调用这样做是为了pgp.as.format:pgp.as.format()中的'default'选项

let formattedQuery = pgp.as.format('INSERT INTO some_table (a,b,c) VALUES ($(a), $(b), $(c))', object, {default: null}); 

db.none(formattedQuery);

是否有可能直接传递default选项没有预先格式化,查询?基本上,我想这样做:

db.none('INSERT INTO some_table (a,b,c) VALUES ($(a), $(b), $(c))', object, {default: null}) 

回答:

我是pg-promise的作者。


在pg-promise所有查询方法依赖于默认的查询格式,更好的可靠性,即当一个查询模板是指一个属性,属性必须存在,否则将引发错误。按照这种方式保持逻辑是合乎逻辑的,因为查询在具有未被值替换的属性时不能正确执行。

查询引擎在内部通过方法as.format支持高级查询格式化选项,例如partialdefault。并且库中有几个对象使用这些选项。

您应该用来生成插入的特别之一是helpers.insert,它可以生成单插入查询和多插入查询。该方法以及更有用的helpers.update使用ColumnSet,该类型是高度可配置的,通过Column类型支持缺失属性的默认值(等等)。

使用ColumnSet,您可以为选择性列或全部指定默认值。

例如,假设该列c可能会丢失,在这种情况下,我们想将它设置为null

var pgp = require('pg-promise')({ 

capSQL: true // to capitalize all generated SQL

});

// declaring a reusable ColumnSet object:

var csInsert = new pgp.helpers.ColumnSet(['a', 'b',

{

name: 'c',

def: null

}

], {table: 'some_table'});

var data = {a:1, b:'text'};

// generating our insert query:

var insert = pgp.helpers.insert(data, csInsert);

//=> INSERT INTO "some_table"("a","b","c") VALUES(1,'text',null)

这使得能够自动生成多插入查询:

var data = [{a:1, b:'text'}, {a:2, b:'hello'}]; 

// generating a multi-insert query:

var insert = pgp.helpers.insert(data, csInsert);

//=> INSERT INTO "some_table"("a","b","c") VALUES(1,'text',null),(2,'hello',null)

同样的方法很适合单更新和多更新查询。

总之,你原来的问题:

是否有可能直接传递默认选项不格式化前的查询?

不,它不应该。相反,您应该使用helpers名称空间中的上述方法来生成正确的查询。他们更强大,更灵活;)

以上是 pgp.as.format()中的'default'选项 的全部内容, 来源链接: utcz.com/qa/257592.html

回到顶部