通过 Rails 将 SQL 文件或 Excel 文件中的数据导入数据库 [关闭]

Posted

技术标签:

【中文标题】通过 Rails 将 SQL 文件或 Excel 文件中的数据导入数据库 [关闭]【英文标题】:Import Data from SQL file or Excel file into database via Rails [closed] 【发布时间】:2012-05-11 18:08:23 【问题描述】:

我有来自 Excel 电子表格的数据,我想通过 Rails 导入数据库。我正在使用 Rails 3.2.3 和 Ruby 1.9.2。

数据为用户名和密码,文件名为member.xlsx

<%= form_for @member do |f| %>
    <%= f.text_field :import,
        :maxlength=>'50',
        :style=>'width: 250px;',
        :placeholder => 'browse file *.sql or *.xlsx' %>
    <%= f.submit  %><% end %>

我的桌子:

create_table :members do |t|
  t.string :username
  t.string :password_hash
  t.string :password_salt

解决了

解决方案

我正在使用电子表格 gem 来解析 Excel 文件,并使用 CarrierWave gem 来上传 Excel 文件。因为我正在为用户使用设计模型,所以这是用于导入文件的控制器的样子

def import
    if params[:excel_file].nil?
      redirect_to user_new_import_path, :flash =>  :error => 'You have not selected a file'
    else
      test_file = params[:excel_file]
      file = ExcelUploader.new
      file.store!(test_file)
      book = Spreadsheet.open "#file.store_path"
      sheet1 = book.worksheet 0
      sheet1.each 1 do |row|
        name = row[0]
        email = row[2]
        generated_password = Devise.friendly_token.first(6) 
        temp_password = generated_password
        @user = User.create(:name => name, :email => email, :password => temp_password, :password_confirmation => temp_password)     
         UserMailer.password_send(@user).deliver
      end
      if @user.save
        redirect_to users_path, :notice => "success"
      else
        redirect_to new_import_user_path, :flash =>  :error => 'error. try again' 
      end
    end
end

【问题讨论】:

"你能给我一些代码来告诉我最好的方法吗?"。不,这不是 SO 的用途。先试一试,如果不起作用,再提出更具体的问题。 欢迎来到 ***!请记住为所有有用的答案投票。包括回答别人的问题。并接受/检查您自己问题的最佳答案。 【参考方案1】:

导入 sql 文件是一个可怕的想法,因为 sql 可以对您的数据库做任何事情。

导入 Excel 文件可以正常工作。有 Excel gems 可以读取数据。 roo gem 可用于 xlsx 格式,但我尚未对其进行测试。我告诉用户使用 Excel 以 xls 格式存储文件,然后他们上传。

更好的(从应用程序开发人员的角度来看)是导入 csv 文件。 csv 的缺点是该文件仅包含一个表。

另一方面,Excel 导入的一个问题是人们可以为您提供多个选项卡文件、公式而不是单元格中的值等。因此请确保包含大量错误检查。

常见问题:当您的代码需要 Date 对象时,人们在 Excel 工作表中将日期作为字符串输入。或者人们作为字符串输入的数字。您的代码应该测试并处理这些问题。

见http://rubygems.org/gems/roo

Re:“给我一些代码”——这不是 *** 的工作方式。希望以上内容对您的旅程有所帮助。

【讨论】:

我需要后端,通过后端备份和恢复数据,并不可怕。 对于后端、备份和恢复类型的方法,建议使用 rake 任务。对于sql输入,可以使用SQL execute method

以上是关于通过 Rails 将 SQL 文件或 Excel 文件中的数据导入数据库 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SQL 语句结果导出到 Excel 文件

将巨大的 excel 文件导入 Rails 应用程序

使用 C# 将 Excel 文件导入 Microsoft SQL Server

无法将 SQL 数据另存为 Excel 或 Zip 文件

将sql查询结果导出到csv或excel

在不使用 OleDB 的情况下通过 aspnet 将 excel 导入 sql 的方法