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。
答案 0 :(得分:1)
您可以使用支持该格式的mysql2
软件包:
您可以通过设置将命名占位符用于参数 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
});