gpt4 book ai didi

node.js - 转义 PostgreSQL 字符串值

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

我正在尝试向我的 postgres 数据库中插入超过 70k 个值。但是,每一行都有不同类型的特殊字符。当我插入时,我得到了通常的错误。例如:“.5”处或附近的语法错误。我正在使用模块 pg-promise。在我使用的代码下方:

  function pg_insert(x) {
var name = x["name"];
var lastName = x["lasname"];

var sql = `insert into table(name, lastname)`;
var values = `values (${name},${lastname})`;

pg.db
.none(sql + values)
.then(data => {})
.catch(err => {
console.log(err);
});
}

任何帮助将不胜感激。

谢谢

最佳答案

正如 Lukasz 提到的,使用 Parameterized Query :

  function pg_insert(x) {
const name = x['name'];
const lastName = x['lasname'];

const sql = 'insert into table(name, lastname) values ($1, $2)';
const values = [name, lastname];

pg.db
.none(sql, values)
.then(data => {})
.catch(err => {
console.log(err);
});
}

你也可以使用 Named Parameters :

  function pg_insert(x) {
const sql = 'insert into table(name, lasname) values (${name}, ${lastname})';

pg.db
.none(sql, x)
.then(data => {})
.catch(err => {
console.log(err);
});
}

然而,如pg-promise Named Parameters documentation中所述:

Keep in mind that while property values null and undefined are both formatted as null, an error is thrown when the property does not exist.

如果您传递的对象 x 中的任何属性不存在(例如 x.namex.lasname{ "name": "Joe"}(注意缺少的 lasname 属性)),那么上面的命名参数示例代码将产生错误。

正如 vitaly-t(库创建者)提到的,有 helper methodspg-promise 中帮助处理丢失的数据。但是,如果您不能保证将传递到查询中的数据的形状,并且对添加清理数据所需的代码不感兴趣,那么参数化查询可能是更容易防止故障的选择。

由读者决定哪种方法最适合他们的用例。

关于node.js - 转义 PostgreSQL 字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51846677/

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