通过 sql 标签的 Slonik 动态插入查询

Slonik dynamic insert query via sql tag

通过 Slonik 我尝试以动态方式创建 sql 语句。我有一个键列表,我想将其用于我的插入语句并创建一个值列表。

这是我的设置示例。尽管我的插入列的定义总是失败。

  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(',')})
  `;

我试过这些表格:

但是 none 被 sql 查询构建器标签允许。

这在 documentation 中已涵盖,但您需要使用 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