Slonik dynamic c вставить запрос с помощью тега sql - PullRequest
0 голосов
/ 01 апреля 2020

Через Слоник Я пытаюсь создать оператор sql динамическим c способом. У меня есть список ключей, которые я хочу использовать для своего оператора вставки и для создания списка значений.

Это пример моей настройки. Хотя определение моих столбцов вставки всегда терпит неудачу.

  const keys = [
    'type',
    'substance_group',
    'substance',
    'unit',
    'zone_id',
    'zone',
    'sector',
    'sub_sector',
    'sum_bruto',
    'sum_netto',
  ];
  const emissionValues = values<string>(pick(emission, keys));

  //  (type, substance_group, substance, unit, zone_id, zone, sector, sub_sector, sum_bruto, sum_netto)
  const query = sql`
    INSERT INTO api.emissions
    (${sql.array(keys, 'text')})
     VALUES (${emissionValues.join(',')})
  `;

Я попробовал эти формы:

  • ${sql.array(keys, 'text')}
  • ${sql.join(keys, sql, )}
  • или обычный ${keys.join(',')

Но ни один из них не разрешен тегом sql построителя запросов.

1 Ответ

0 голосов
/ 02 апреля 2020

Это описано в документации , но вам нужно использовать sql.identifier для идентификаторов, например,

const identifiers = keys.map((key) => {
  return sql.identifier([key]);
});

sql`
  INSERT INTO api.emissions
  (${sql.join(identifiers, sql`, `)})
  VALUES
  (${sql.join(values, sql`, `)})
`

Если вы вставляете несколько строк, посмотрите на sql.unnest.

...