【问题标题】:Mysql Data Import Using Ruby使用 Ruby 导入 MySQL 数据
【发布时间】:2013-08-07 08:55:38
【问题描述】:

我正在使用 ruby​​ 将 csv 文件从前端导入 mysql。 这是我的控制器代码

需要'csv' 定义 csv_import @parsed_file=CSV::Reader.parse(params[:dump][:file]) n=0 @parsed_file.each 做 |row| c=客户信息.new c.job_title=行[1] c.first_name=行[2] c.last_name=行[3] 如果 c.save n=n+1 GC.start 如果 n%50==0 结尾 flash.now[:message]="CSV 导入成功,#{n} 条新记录添加到数据库" 结尾

这是我的前端代码。

<pre>
<% form_for :dump, :url=>{:controller=>"customer_informations", :action=>"csv_import"}, :html => { :multipart => true } do |f| -%>
 <table">
   <tr>
     <td>
      <label for="dump_file">
        Select a CSV File :
      </label>
     </td>
     <td >
       <%= f.file_field :file -%>
     </td>
   </tr>
   <tr>
     <td colspan='2'>
       <%= submit_tag 'Submit' -%>
     </td>
   </tr>
 </table>
<% end -%>
</pre>

现在我想要的是,我在 DB 中有大约 30 列,csv 将包含 30 个列标题。此外,对于检查,我将使用 textfield 询问其中一列作为输入,以便在 csv 表中生成 29 列。根据用户选择的选项,从文本框中选择的实体会附加 29 列。

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: mysql ruby mysqlimport


    【解决方案1】:

    如果你让表头和表格列一样,你的代码应该很简单:

    CSV::foreach(filename, :headers => true) do |row|
      Model.new(row.to_hash).save
    end
    

    【讨论】:

    • 所以如果我遗漏了文件中的任何列,它就不会在 db 的 dat 列中插入数据。,??
    • 对不起,我完全听不懂那句话。
    • 我的意思是我的数据库中有 30 列。如果我在我的 excel 文件中只使用列标题制作 29 列,它会自行调整并根据列标题放置数据吗?
    • 是的,想法是让哈希键与字段名称相对应。
    猜你喜欢
    • 2013-08-08
    • 2011-08-25
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 2014-05-28
    • 2016-08-27
    • 2017-05-10
    相关资源
    最近更新 更多