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

sorashiro · 2015年08月04日 · 最后由 sorashiro 回复于 2015年08月05日 · 3302 次阅读

我从.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()中怎么用变量表示,看了很多地方都没解决。。。求救。。谢谢大家

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

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

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

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

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

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

不知道为什么。。

#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 语句支持一次插入多条记录的

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

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