sqlite 通过命令行导入 csv 时出错

问题描述 投票:0回答:4
$ 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.  
sql sqlite csv import
4个回答
6
投票

由于您的分隔符只是一个字符,请尝试使用分隔符命令,分号两边不带引号。所以:

sqlite> .separator ;
sqlite> .import sqlite.csv test

5
投票

您无法导入带有主键的表,您必须先导入到临时表中。

查看此问题的答案


1
投票

也许您的字符串之一中存在未正确转义的换行符?因此它认为第二行在“tellus”之后结束,然后尝试解析以 Magna 开头的文本作为第三行,但没有找到分号分隔符。您能否发布在文本板中打开 CSV 时的屏幕截图?


0
投票

下面

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
  • 下导入文件的同一文件夹中

这就是它的样子

© www.soinside.com 2019 - 2024. All rights reserved.