Sql 节点Postgres基于数组和静态变量插入多行
我正在尝试基于数组从Nodejs服务器向PostgresSQL服务器插入多行。我有一个静态变量user_id,它对于所有条目都是相同的,但是我想根据数组更改过滤器的名称。我的目标是不进行多个SQL insert调用Sql 节点Postgres基于数组和静态变量插入多行,sql,node.js,postgresql,node-postgres,Sql,Node.js,Postgresql,Node Postgres,我正在尝试基于数组从Nodejs服务器向PostgresSQL服务器插入多行。我有一个静态变量user_id,它对于所有条目都是相同的,但是我想根据数组更改过滤器的名称。我的目标是不进行多个SQL insert调用 arrayOfFilters = ["CM", "CBO", "SA", "EPS", "AD"] await db.query( "INSERT INTO filters(filter_name, requests_id)VALUES($1, $2)",
arrayOfFilters = ["CM", "CBO", "SA", "EPS", "AD"]
await db.query(
"INSERT INTO filters(filter_name, requests_id)VALUES($1, $2)",
[arrayOfFiltersParams, user_id]);
我希望在过滤器表中为ArrayOfficers中找到的每个过滤器都有一行,每个条目都有一个匹配的用户id键,在本例中为5行。
非常感谢 编写一个助手函数展开以生成。以下是一个解决方案:
从“../../db”导入{pgclient};
函数expandrowCount,columnCount,startAt=1{
var指数=startAt;
返回阵列计数
.fill0
地图
v=>
`${ArraycolumnCount
.fill0
.mapv=>`$${index++}`
.join','}`,
。加入“,”;
}
函数展平{
var newArr:任何[]=[];
arr.forEachv=>v.forEachp=>newArr.pushp;
返回newArr;
}
异步功能测试{
试一试{
等待pgclient.connect;
//创建表
等待pgclient.query`
如果不存在筛选器,则创建表
id串行主键,
过滤器名称VARCHAR10,
请求\u id整数
`;
//试验
常量数组过滤器=['CM'、'CBO'、'SA'、'EPS'、'AD'];
const user_id=1;
const arrayOfFiltersParams:any[]=arrayOfFilters.mapel=>[el,user_id];
等待pgclient.query
`插入过滤器过滤器名称,请求id值${expandarrayOfFilters.length,2}`,
平面阵列滤波器,
;
}捕捉错误{
console.logerror;
}最后{
pgclient.end;
}
};
执行上述代码后,检查数据库:
节点sequelize示例=从过滤器中选择*;
id |过滤器|名称|请求| id
--+-------+-------
1厘米1
2 | CBO | 1
3 | SA | 1
4 |每股收益| 1
5 | AD | 1
5排
不,你不能这样做。您需要对ArrayOffilter中的每个项重复此查询。构造多值insert语句有一些优化,但在这种情况下不值得。回答得很好,解决了我的问题,谢谢。