ruby - 使用 PG gem 在参数化语句中多次插入
问题描述
使用 Ruby PG gem,我试图同时插入几行exec_params
。
我想要实现的是:
INSERT INTO public.my_things (col1, col2)
VALUES
('value11', 'value12'),
('value21', 'value22'),
('value31', 'value32');
我试过这个(和其他组合):
connection.exec_params(
'INSERT INTO public.my_things (col1, col2) VALUES ($1, $2)',
[['value11', 'value12'], ['value21', 'value22'], ['value31', 'value32']],
)
解决方案
有两点需要注意:
- 您需要正确数量的占位符。
#exec_params
想要参数的平面数组。
所以你想说:
connection.exec_params(
'INSERT INTO public.my_things (col1, col2) VALUES ($1, $2), ($3, $4), ($5, $6)',
['value11', 'value12', 'value21', 'value22', 'value31', 'value32']
)
或者,如果您有一个数组数组,并且您不知道运行时需要多长时间:
aoa = [['value11', 'value12'], ['value21', 'value22'], ['value31', 'value32'], ... ]
values = aoa.length.times.map { |i| "($#{2*i+1}, $#{2*i+2})" }.join(',')
connection.exec_params(
"INSERT INTO public.my_things (col1, col2) VALUES #{values}",
aoa.flatten
)
推荐阅读
- javascript - 将集合映射到对象
- spring-boot - Dockerized spring-boot web 服务抛出 FileNotFound 异常
- reporting-services - 相邻的行组一个接一个
- primefaces - 如果通过 dataExporter 导出 dataTable,如何防止 convertNumber
- javascript - 将 html 链接添加到聊天机器人的响应中
- node.js - 节点 | worker_thread | 在工作人员中保持活动的 tcp 连接?
- phpstorm - Ubuntu 18 上的 PhpStorm - 只读状态(无法更改文件)
- c# - 如何在c#中替换字符串中特定行的文本?
- json - 处理 json 字符串中科学计数法中的长数字 - Freemarker
- python - 如何设置默认日期字段并覆盖它以及设置默认默认日期时间字段并覆盖它,所有这些都在同一个models.py中