通过 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(',')})
`;
我试过这些表格:
${sql.array(keys, 'text')}
${sql.join(keys, sql
、)}
- 或普通的
${keys.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
。
通过 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(',')
但是 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
。