使用$ 1代替具有pg-promise查询的Template Literal有好处吗?

时间:2019-05-04 17:06:07

标签: postgresql pg-promise

使用pg-promise,与模板文字相比,使用$1有什么好处吗?模板文字对我来说更熟悉,但是由于这个软件包的原因,我不得不假设它们的用法有所不同。

“常规”方式:

db.any('SELECT * FROM users WHERE active = $1', [true])

我的操作方式:

const isTrue = true;

db.any(`SELECT * FROM users WHERE active = ${isTrue}`)

更新了我的操作方式:

const isTrue = true;
const name = 'Matt'
db.any('SELECT * FROM users WHERE active = $1 AND name = $2', [isTrue, name])

OR

const isTrue = true;
const name = 'Matt'
db.any(`SELECT * FROM users WHERE active = $/isTrue/ AND name = $/name/`, {isTrue, name})

1 个答案:

答案 0 :(得分:2)

  

相对于模板文字,使用$ 1有什么好处?

您不能使用模板文字,documentation emphasizes

  

重要提示::切勿在ES6模板字符串中使用保留的${}语法,因为它们不知道如何格式化PostgreSQL的值。在ES6模板字符串中,您只能使用4个替代方法之一-$()$<>$[]$//

您应该使用Named Parameters,与Index Variables相比,它们提供了很多好处:

对于您自己的示例,如果您确实需要模板字符串:

const isTrue = true;

db.any(`SELECT * FROM users WHERE active = $/isTrue/`, {isTrue})

或者您也可以使用标准字符串:

db.any('SELECT * FROM users WHERE active = ${isTrue}', {isTrue})