Node.js-sqlstring替代,允许命名命名替换

时间:2018-11-14 13:46:03

标签: sql node.js templates npm

sqlstring节点模块允许使用有序数组创建查询。因此,如果我有一个模板查询,例如:

sqlstring.format('Select * from users where id = ?', ['my_id'])

它将变为:

Select * from users where id = 'my_id'

但是,在这里我需要记住问号的顺序,因此,如果同一事物在多个地方都存在,则会变得很麻烦。有没有一种选择可以让我执行以下操作:

sqlstring.format('Select :id + :foo as bar from users where id = :id', {id: 1, foo: 3})

将会成为:

Select 1 + 3 as bar from users where id = 1

我知道knex查询构建器可以做到这一点,但是我不想只为查询构建器安装整个knex。

1 个答案:

答案 0 :(得分:1)

您可以使用支持该格式的mysql2软件包:

Named placeholders

  

您可以通过设置将命名占位符用于参数   namedPlaceholders配置值或查询/执行时间选项。命名   占位符转换为未命名?在客户端上(mysql协议   不支持命名参数)。如果您引用参数   以相同的名称多次发送到多个服务器   时间。

connection.config.namedPlaceholders = true;
connection.execute('select :x + :y as z', {x: 1, y: 2}, function (err, rows) {
     // statement prepared as "select ? + ? as z" and executed with [1,2] values
     // rows returned: [ { z: 3 } ]
 });

connection.execute('select :x + :x as z', {x: 1}, function (err, rows) {
     // select ? + ? as z, execute with [1, 1]
});

connection.query('select :x + :x as z', {x: 1}, function (err, rows) {
     // query select 1 + 1 as z
});