【问题标题】:Slonik dynamic insert query via sql tagSlonik 通过 sql 标签动态插入查询
【发布时间】:2020-07-13 06:36:19
【问题描述】:

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

我尝试了这些形式:

  • ${sql.array(keys, 'text')}
  • ${sql.join(keys, sql, )}
  • 或普通${keys.join(',')

但 sql 查询生成器标签不允许任何内容。

【问题讨论】:

    标签: javascript sql node.js node-postgres slonik


    【解决方案1】:

    这在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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      相关资源
      最近更新 更多