我想使用以下命令将CSV文件导入到SQLite数据库
sqlite> .separator ,
sqlite> .mode csv data
sqlite> .import test.csv data
其中,data
是包含三列的表名,就像文件一样。
该文件有一些使用双引号封装的字符串值。某些字符串值中包含逗号("Bond\, James"
文件中的实际示例),应将其视为单个列,但SQLite会产生错误
Error: test.csv line 2: expected 3 columns of data but found 4
如何才能使SQLite正确地导入这些值?
3条答案
按热度按时间bksxznpy1#
我知道这有点老了,但这是第一个相关的谷歌搜索结果,所以我想分享我的解决方案。
使用不同的分隔符,并去掉值两边的引号。
tsm1rwdh2#
SQLite的.import将接受如下CSV行
前提是前面的逗号和用引号括起来的字符串之间没有空格。
由于以下代码在
fi,
和"fo
之间有一个空格``它将产生如下错误:
如果有人想知道为什么会出现这种情况,这是SQLite的作者Richard Hipp在2019年5月21日在'CSV import does not handle fields with a comma surrounded by double'线程中对SQLite用户邮件列表的两封邮件的回应。(应该是“双引号”,但我忘了最后一个词。)他wrote:
这不是有效的CSV。逗号之后和双引号之前有一个额外的空格字符。
和then
我要坐RFC4180。https://tools.ietf.org/html/rfc4180。在第二页上说:“空格被认为是字段的一部分,不应被忽视。”
(如果有人想知道为什么我发布了第三方/非官方档案的互联网档案副本,IA副本只是出于大量的警告。非官方存档是因为,据我所知,官方邮件列表存档并不存在。邮件列表本身在一段时间前已停止使用。)
因此,逻辑是字符串应该用空格括起来,它也应该用前导空格括起来。
随后是文字记录环节。
ogsagwnx3#
我自己经历过这个问题,我发现修改我的脚本要容易得多,这样它就可以转储SQL查询,而不是CSV分隔值。
将CSV数据导入到SQlite3中时,不仅存在逗号问题,还存在换行符问题。
我会提出以下建议: