&引用;“无景观”;“字符”;将文本数据导入SQLite时

&引用;“无景观”;“字符”;将文本数据导入SQLite时,sqlite,Sqlite,我正在尝试导入一个分号分隔的文本文件,其中每行以CRLF结尾。第一行包含字段,数据从第2行开始: "Field1";"Field2" "123";"Foo" "456";"Bar" 我尝试了以下操作,但使用“input.csv:23:unescaped”字符失败: 知道我做错了什么吗 谢谢。这对我很有用: $ sqlite3 input.sqlite sqlite>.mode csv sqlite>.separator ; sqlite>.import .input.csv

我正在尝试导入一个分号分隔的文本文件,其中每行以CRLF结尾。第一行包含字段,数据从第2行开始:

"Field1";"Field2"
"123";"Foo"
"456";"Bar"
我尝试了以下操作,但使用“input.csv:23:unescaped”字符失败:

知道我做错了什么吗

谢谢。

这对我很有用:

$ sqlite3 input.sqlite
sqlite>.mode csv
sqlite>.separator ;
sqlite>.import .input.csv input
它创建了以下模式

sqlite> .schema
CREATE TABLE input(
"Field1" TEXT,
"Field2" TEXT
);
在尝试加载更大的CSV文件时,我遇到了类似的问题

csvsql --db sqlite:///mydb.sqlite --insert input.csv
这种方法还具有检测每列数据类型的额外好处

sqlite> .schema
CREATE TABLE input (
"Field1" DECIMAL NOT NULL,
"Field2" VARCHAR NOT NULL
);

对于sqlite,当要导入的数据可能包含双引号字符(“)时,不要使用csv模式。读取每个CSV字段的代码将查找该字段,当它找到该字段时,将确保该字段被终止或希望被引用

将列分隔符更改为“;”不会有帮助,因为该代码仍将被执行

另一方面,以ascii模式读取每个字段的代码仅使用列分隔符和行分隔符来确定字段内容

因此,使用ascii模式并将列和行分隔符设置为分号和行尾,如下所示:

*尼克斯:

窗口:

sqlite> .mode ascii
sqlite> .separator ";" "\r\n"
sqlite> .import input.csv MyTable

但是,这并不会去掉数据周围的双引号;它们被视为数据的一部分。

第23行是什么?只是其中一条记录。我查过了,没什么奇怪的。每个字段都与上面类似,在前后使用双引号。
sqlite3
程序认为有些奇怪。
sqlite> .mode ascii
sqlite> .separator ";" "\n"
sqlite> .import input.csv MyTable
sqlite> .mode ascii
sqlite> .separator ";" "\r\n"
sqlite> .import input.csv MyTable