Javascript 使用对象键作为列名将对象的JSON数组插入postgreSQL
我有一个用Javascript编写的应用程序,它使用postgreSQL(9.6)DB存储数据。 有没有办法将Javascript对象直接插入数据库 我创建了这个示例表:Javascript 使用对象键作为列名将对象的JSON数组插入postgreSQL,javascript,sql,json,postgresql,Javascript,Sql,Json,Postgresql,我有一个用Javascript编写的应用程序,它使用postgreSQL(9.6)DB存储数据。 有没有办法将Javascript对象直接插入数据库 我创建了这个示例表: CREATE TABLE people ( "uuid" uuid PRIMARY KEY, "name" text NOT NULL, "phone" number ); 应用程序中的Javascript对象: { uuid: 'df7c5fdc-d6b7-4b5e-ac3b-1228fac64a90',
CREATE TABLE people (
"uuid" uuid PRIMARY KEY,
"name" text NOT NULL,
"phone" number
);
应用程序中的Javascript对象:
{
uuid: 'df7c5fdc-d6b7-4b5e-ac3b-1228fac64a90',
name: 'Martin',
phone: 123456
}
现在我有了一个不同人物的数组(上面的对象数组),我设法以这种方式将它插入到DB中:
let uuids = people.map(p => `'${p.uuid}'`) // adding quotes, otherwise syntax error
let names = people.map(p => `'${p.name}'`)
let phones = people.map(p => `'${p.phone}'`)
INSERT INTO people (
"uuid",
"name",
"phone"
)
VALUES (
UNNEST(ARRAY[${uuids}])::uuid,
UNNEST(ARRAY[${names}])::text,
UNNEST(ARRAY[${phones}])::number
)
有没有更有效的方法?像mongodb.collection.insertMany(数组)
?另外,我想省略一些值,让它们NULL
,这在本例中是不可能的
我在PostgreSQL文档中搜索,有几个函数可以使用json,但我找不到任何适合的函数
谢谢您的帮助。有机会测试
json\u to\u recordset()
:
其中占位符应该绑定到您描述的对象数组(当然,除了正确的JSON)
有机会测试
json\u to\u recordset()
:
其中占位符应该绑定到您描述的对象数组(当然,除了正确的JSON)
是什么让你认为这是低效的呢?Postgresql的
json\u to\u recordset()
函数与INSERT-in组合在一起看起来很有希望。。。选择
作为完全在SQL中执行此操作的方法。“添加引号,否则会出现语法错误”听起来像是正在进行的SQL注入。@好吧,用map创建三个新数组很奇怪。在我的应用程序中,我有10多个属性,因此这意味着有10多个新数组都是不受欢迎的。@IljaEverilä在JSON之后似乎很安全。Stringify什么让你认为这有什么低效的地方?Postgresql的JSON_to_recordset()
函数与INSERT-In组合在一起时看起来很有希望。。。选择
作为完全在SQL中执行此操作的方法。“添加引号,否则会出现语法错误”听起来像是正在进行的SQL注入。@好吧,用map创建三个新数组很奇怪。在我的应用程序中,我有10多个属性,因此这意味着有10多个新数组都是不受欢迎的。@IljaEverilä在JSON.stringify之后似乎很安全。如果这样,我只需要做JSON_to_记录集(JSON.stringify(myArraw))
,谢谢!那就行了,我只需要做json\u to\u记录集(json.stringify(myArraw))
,谢谢!
INSERT INTO people("uuid", name, phone)
SELECT "uuid", name, phone
FROM json_to_recordset(?) AS x("uuid" uuid, name text, phone int);