【发布时间】:2012-05-15 18:57:01
【问题描述】:
Ruby 相对较新,正在运行:Ruby 1.9.2 和 MySQL 5.5.19
我有一个 csv 文件,其中包含我想添加到 mysql 数据库上现有表中的数据。 csv 文件没有标题。是的,我知道关于这个话题已经有多个问题了。以下是它的分解方式:
答案 #1:使用 LOAD DATA INFILE 不幸的是,LOAD DATA INFILE 给了我以下错误:“无法获取 'filename.csv' 的统计信息(错误代码:2)” 这似乎是某种权限问题。我已经直接在 mysql 提示符下(以 root 身份)和通过 Ruby 脚本进行了尝试。我在 csv 文件上尝试了各种 chmod 选项,以及将 csv 文件移动到其他用户说它适用于他们的各种目录。没有运气。无论如何,此时大多数人都建议...
答案 #2:使用 LOAD DATA 本地 INFILE 不幸的是,这也会返回一个错误。显然本地 infile 是默认关闭的 mysql 选项,因为它存在安全风险。我试过打开它,但除了错误之外什么也没有,例如: ERROR 1148 (42000): 此 MySQL 版本不允许使用的命令 并且 # (NoMethodError) 的未定义方法 `execute'
答案 #3:我可以找到各种涉及 Rails 的答案,但都不适合这种情况。这不适用于 Web 应用程序(尽管 Web 应用程序可能稍后会访问它),我现在只是尝试将数据添加到数据库中,作为一次性的数据分析。
Ruby 文件应该非常简单:
require 'rubygems'
require 'csv' (or fastercsv?)
require 'mysql'
db = mysql.connect('localhost','root','','databasename')
CSV.foreach('filename.csv') do |row|
?????
db.execute("INSERT INTO tablename ?????")
end
附:非常感谢提前。请不要回答指向使用 LOAD DATA INFILE 或 LOAD DATA LOCAL INFILE 的答案。已经浪费了足够多的时间试图让它发挥作用......
【问题讨论】:
-
好吧,再努力一点。
load data infile是导入 CSV 文件最快(可能也是最合适)的方式。 -
这是我见过的第一个stackoverflow。 “更加努力?”。如果您有任何关于如何解决问题的具体建议,我很高兴听到这些建议。