使用 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
)
关于ruby - 使用 PG gem 在参数化语句中进行多次插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52488876/