Node.js - альтернатива sqlstring, которая позволяет именованные именные замены - PullRequest
0 голосов
/ 14 ноября 2018

Модуль узла 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 голосов
/ 14 ноября 2018

Вы можете использовать пакет mysql2, который поддерживает этот формат:

Именованные заполнители

Вы можете использовать именованные заполнители для параметров, установив Значение конфигурации namedPlaceholder или опция времени запроса / выполнения. названный заполнители конвертируются в неназванные? на клиенте (протокол 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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...