我正在使用 sequelize (postgres),我需要正确转义这样的查询:
`
UPDATE "Pets"
SET "name" = CASE LOWER("name")
${input.pets
.map((pet) => `WHEN '${pet.name.toLowerCase()}' THEN '${pet.newName}'`)
.join('\n')}
ELSE "name"
END
WHERE LOWER("name") IN(${input.pets
.map((pet) => `'${pet.name.toLowerCase()}'`)
.join(',')});
`
样品input.pets
:
[{ name: "rocky", newName: "leo" }]
有谁知道如何通过替换来实现这一目标?
我在 github 上找到了一个线程,它提出了这样的建议:
let data = [ [ 252456, 1, 55, '0' ],
[ 357083, 1, 56, '0' ],
[ 316493, 1, 57, '0' ] ];
db.query(
`INSERT INTO product (a, b) VALUES ${data.map(a => '(?)').join(',')};`,
{
replacements: data,
type: Sequelize.QueryTypes.INSERT
}
);
但是,这里使用的是二维数组,而不是对象数组。有没有办法从数组中访问单个属性?当我尝试这样的事情时
`
UPDATE "Pets"
SET "name" = CASE LOWER("name")
${input.pets
.map((_pet) => `WHEN ? THEN ?`)
.join('\n')}
ELSE "name"
END
WHERE LOWER("name") IN(${input.pets
.map((_pet) => `?`)
.join(',')});
`,
{ type: QueryTypes.UPDATE, replacements: input.pets },
第一个?
结果是整个对象。有没有办法访问它的属性?我还尝试转换input.pets
为二维数组,但仍然无法像上面插入的示例那样使其工作。
提前感谢您的时间