Database 如何用 Ruby 循环往 PostgreSQL 中插入数据??

sorashiro · 发布于 2015年08月04日 · 最后由 sorashiro 回复于 2015年08月05日 · 1460 次阅读
17465

我从.xlsx文件中读取到数据data通过

data.each(id: 'id', name: 'name')do |hash|
  puts hash.inspect
end

可以得到

{:id=>1.0, :name=>"wang"}
{:id=>2.0, :name=>"xiao"}
{:id=>3.0, :name=>"fan"}

我想通过data.each方法将读出来的数据插入到postgresql的表中, 但是不知道该怎么写循环的SQL语句

conn.exec("INSERT INTO test1 VALUES ( 1, 'wang' );")

就是说不知道VALUES()中怎么用变量表示,看了很多地方都没解决。。。求救。。谢谢大家

共收到 8 条回复
370

你从有数据的数据库 dump 一份出来,然后照得写的就行了。 字符串中加变量,"something #{var}, {var2}" 就可以了.

1342

为什么不全部读出来放到一个array里面然后再插入这个array到数据库里面呢?这比循环插入还快,使用batch插入的话更快

17465

#1楼 @nouse 导出成CSV是指在程序中.to_csv呢还是生成文件时生成CSV的?
这边的需求是要从.xlsx文件导入。。所以如果是上面第二种的话就没办法了

17465

#3楼 @ywjno 请问全部读出来的话放到一个array该怎么写呢。。还有我不是全部数据都要导入进数据库,只是.xlsx文件中和数据库中能匹配的要存进去,不知道怎么插入array到数据库。。。

17465

#2楼 @kgen 现在还有个奇怪的问题,我生成hash后data = {:id=>"id", :name=>"name"} 通过 data[:id] 取不出来数据

test.rb:36:in `[]': no implicit conversion of Symbol into Integer (TypeError)

不知道为什么。。

1342

#5楼 @sorashiro 1)data 是不是已经是从 xlsx 读取出来的数组类型了呢? 2)从该 data 的数据取出 where 条件去检索数据库(主键检索也好 name 检索也好总归会是一个规则),然后得到一个结果集 has_in_db_result,该结果集是数据库跟 xlsx 都有的数据,也就是你要处理的 3)循环 has_in_db_result,把要处理的数据从 data 中取出,放到一个 insert_to_db_result 数组里面 4)把 insert_to_db_result 数组插入到数据库,insert 语句支持一次插入多条记录的

17465

#7楼 @ywjno 十分感谢~我自己再试试!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册