使用Sqlite3控制台上传CSV - 引号内逗号的不同处理方式

时间:2014-06-07 15:36:11

标签: ruby-on-rails-3 csv sqlite

我目前遇到的问题与将CSV文件读入rails应用程序中的sqlite3数据库有关。我有大约20个CSV文件,每个文件有20k行数据,我需要定期读入数据库。

尝试了几种不同的方法,我选择使用sqlite3 console,因为这使我能够快速上传数据(在几秒钟内,而不是使用我以前使用的代码通过Rails的时间)。我在本地测试了这种方法,我正在运行sqlite 3.7.15.2并使用以下命令成功地将数据读入我的表allitems

  sqlite3 development.sqlite3
  .separator ','
  .import '../newdata.csv' allitems

在我的成功鼓舞下,我开始尝试在现场测试网站上重新创建这个过程。但是,在这种情况下,我收到一些错误,表明newdata.csv中的列数并不总是与allitems中的列数相匹配。我在Excel中检查了数据,发现所有数据都在正确的列数中。在进一步调查中,我发现文本字符串中的逗号引起了问题并在线发现了一些信息(http://www.sqlite.org/cvstrac/wiki?p=ImportingFiles),表明sqlite3将始终在逗号上分开,无论它们是否在引号内

我的第一个解决方案是尝试使用一个永远不会出现在文本字符串(,|,)中的新分隔符,虽然这确实成功但也导致了不同的问题,因为现在网页上显示的许多文本字段包含"在开始和结束时有各种敲击效果。我为此创建了一个额外的工作,将我的分隔符转换为","并在非字符串的字段之前和之后插入",但是数据中的异常会变成一个永无止境的小提琴。

对上述方法失去耐心,我正在寻找一些关于如何解决这个问题的建议?特别是,我很困惑,为什么我在本地运行代码时没有任何问题,但在服务器上遇到所有这些问题。服务器当前正在运行sqlite 3.7.3,但我不知道这是否是问题的原因,或者我是如何远程更新版本的......

感谢您的建议

1 个答案:

答案 0 :(得分:0)

强大地导入CSV文件很复杂; sqlite3的导入功能仍有一些频繁的错误修正。

显然,版本3.7.3和3.7.15之间存在必要的错误修复。

sqlite3工具实际上没有任何依赖关系。 Download或编译自己的副本,将其重命名为您喜欢的任何副本,并使用它。