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

Javascript 通过sql标记的Slonik动态插入查询,javascript,sql,node.js,node-postgres,slonik,Javascript,Sql,Node.js,Node Postgres,Slonik,通过,我尝试以动态方式创建sql语句。我有一个用于insert语句和创建值列表的键列表 这是我的设置示例。尽管我的插入列的定义总是失败 const keys = [ 'type', 'substance_group', 'substance', 'unit', 'zone_id', 'zone', 'sector', 'sub_sector', 'sum_bruto', 'sum_netto', ]; c

通过,我尝试以动态方式创建sql语句。我有一个用于insert语句和创建值列表的键列表

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

  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(',')})
  `;
const key=[
“类型”,
“物质组”,
“物质”,
"单位",,
“区域id”,
"地带",,
“部门”,
“次级部门”,
“sum_bruto”,
“sum_netto”,
];
常量发射值=值(拾取(发射,关键点));
//(类型、物质组、物质、单位、区域id、区域、扇区、子扇区、总和布鲁托、总和净额)
constquery=sql`
插入api.1中
(${sql.array(键,'text')})
值(${emissionValues.join(',')})
`;
我试过这些表格:

  • ${sql.array(键,'text')}
  • ${sql.join(键,sql
    )}
  • 或纯
    ${keys.join(',')
但是sql查询生成器标记不允许使用任何标识符。

中介绍了这一点,但您需要使用
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`, `)})
`

如果要插入多行,请查看