gpt4 book ai didi

javascript - Postgres 相当于 MySQL 的 SET?

转载 作者:搜寻专家 更新时间:2023-11-01 00:21:39 25 4
gpt4 key购买 nike

我正在尝试从 MySQL 迁移到 Postgres,但遇到了一点问题。我有一个表单,用户可以在其中填写大约 40 个字段,并将这些值插入到数据库中。对于 MySQL,我习惯于这样做:

INSERT INTO table_name SET name="John Smith", email="jsmith@gmail.com", website="jsmith.org";

我还在 nodejs 中使用 mysql 模块,这就是我的代码目前的样子:

var data = {
name: req.body.name,
email: req.body.email,
website: req.body.website,
...
...
}

var query = connection.query('INSERT INTO table_name SET ?', data)

因为 SET 不是有效的 SQL,如果我想使用 Postgres,使用 pg 模块的查询看起来像这样:

client.query('INSERT INTO table_name (name, email, website) VALUES ($1, $2, $3)', req.body.name, req.body.email, req.body.website)

考虑到我有将近 40 个字段,这会变得非常乏味。

有没有更好的方法来执行此操作,还是我不得不手动编写查询?

谢谢。

最佳答案

因为您已经有一个包含相关数据的对象

var data = {
name: req.body.name,
email: req.body.email,
website: req.body.website,
...
...
}

您可以编写一个包含 pg 的查询函数客户的query方法并添加对象作为值支持:

function insert(client, table, values) {
const keys = Object.keys(values),
// IMPORTANT: escape column identifiers. If `values` should come
// from an uncontrolled source, naive concatenation would allow
// SQL injection.
columns = keys.map(k => client.escapeIdentifier(k)).join(', '),
placeholders = keys.map((k, i) => '$' + (i + 1)).join(', ');

return client.query(`INSERT INTO ${client.escapeIdentifier(table)}
(${columns}) VALUES (${placeholders})`,
// According to docs `query` accepts an array of
// values, not values as positional arguments.
// If this is not true for your version, use the
// spread syntax (...args) to apply values.
keys.map(k => values[k]));
}

...

insert(client, 'table_name', data);

或者,您可能可以使用 sql-template-strings 重写您的查询,这看起来相当不错。

关于javascript - Postgres 相当于 MySQL 的 SET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com