$ sqlite3 test.sql
SQLite version 3.6.12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table test (id integer, author_id integer, title varchar(128), name text);
sqlite> .separator ";"
sqlite> .import sqlite.csv test
sqlite.csv line 3: expected 4 columns of data but found 1
sqlite> .separator ';'
sqlite> .import sqlite.csv test
sqlite.csv line 3: expected 4 columns of data but found 1
sqlite>
我正在尝试使用 ; 导入 csv 表作为 sqlite 的分隔符,但它无法找到 4 列。我从 sql 导出到 csv,并选中“将字段名称放在第一行”。我可能在这里遗漏了什么吗?
csv 的前 5 行
id;"author_id";"title";"poem"
1;"92";"A Letter From Italy";"Salve magna parens frugum Saturnia tellus
Magna virm! tibi res antiqu laudis et artis
Aggredior sanctos ausus recludere fontes.
Virg. Geor. 2.
由于您的分隔符只是一个字符,请尝试使用分隔符命令,分号两边不带引号。所以:
sqlite> .separator ;
sqlite> .import sqlite.csv test
也许您的字符串之一中存在未正确转义的换行符?因此它认为第二行在“tellus”之后结束,然后尝试解析以 Magna 开头的文本作为第三行,但没有找到分号分隔符。您能否发布在文本板中打开 CSV 时的屏幕截图?
下面
ImportBatch.bat
读取一个以分号;
分隔的文件并将其导入到sqlite中。
使用示例
C:\src>ImportBatch.bat C:/csv/input/foo.csv
批处理文件有这个内容
@echo off
if "%1"=="" (
echo Usage: %0 [source_csv_file]
exit /b 1
)
set SOURCE_CSV_FILE=%~1
set SQLITE_PATH=c:\Apps\SQLite\sqlite_3.40.1
set DEST_DB_FILE=%SOURCE_CSV_FILE%.db
(
echo .open ":memory:"
echo .mode csv
echo .separator ;
echo .import %SOURCE_CSV_FILE% myTable
echo .save %DEST_DB_FILE%
) | %SQLITE_PATH%\sqlite3.exe
它
foo.csv
),其中 ;
作为列分隔符,并且 foo.csv.db
这就是它的样子