143

我正在尝试将 csv 文件导入 SQLite 表。

示例 csv:

1,2
5,6
2,7

示例命令:

sqlite> create table foo(a, b);
sqlite> .separator ,
sqlite> .import test.csv foo
Error: test.csv line 1: expected 2 columns of data but found 4

我什至不确定为什么它会找到四列,其中包含六条数据和两列。

4

10 回答 10

180

评论中还说了什么,SQLite 将您的输入视为 1、25、62、7。我也遇到了问题,在我的情况下,它通过将“分隔符”更改为“.mode csv”来解决。所以你可以尝试:

sqlite> create table foo(a, b);
sqlite> .mode csv
sqlite> .import test.csv foo

第一个命令为表创建列名。但是,如果您想要从 csv 文件继承的列名,您可以忽略第一行。

于 2014-07-05T00:46:31.253 回答
37

我正在将以前答案中的信息与我自己的经验合并。最简单的方法是将逗号分隔的表头直接添加到您的 csv 文件中,然后是一个新行,然后是您的所有 csv 数据。

如果您再也不会做 sqlite 的事情(像我一样),这可能会为您节省一两次网络搜索:

在 Sqlite 外壳中输入:

$ sqlite3 yourfile.sqlite
sqlite>  .mode csv
sqlite>  .import test.csv yourtable
sqlite>  .exit

如果你的 Mac 上没有安装 Sqlite,运行

$ brew install sqlite3

您可能需要进行一次网络搜索以了解如何安装 Homebrew。

于 2017-05-04T14:52:50.357 回答
32

这就是我的做法。

  • 制作/转换 csv 文件以由制表符 (\t) 分隔,并且不被任何引号括起来(sqlite 从字面上解释引号 - 旧文档说)
  • 进入需要添加数据的db的sqlite shell

    sqlite> .separator "\t" ---IMPORTANT! should be in double quotes sqlite> .import afile.csv tablename-to-import-to

于 2015-04-03T18:49:01.437 回答
13

如何将csv文件导入sqlite3

  1. 创建数据库

    sqlite3 NYC.db
    
  2. 设置模式和表名

    .mode csv tripdata
    
  3. 将csv文件数据导入sqlite3

    .import yellow_tripdata_2017-01.csv tripdata
    
  4. 查找表

    .tables
    
  5. 查找您的表架构

    .schema tripdata
    
  6. 查找表数据

    select * from tripdata limit 10;
    
  7. 计算表中的行数

    select count (*) from tripdata;
    
于 2019-05-28T04:40:48.660 回答
9

在 .import 命令之前,输入“.mode csv”

于 2015-03-11T06:59:46.267 回答
4

使用Termsql,您可以在一行中完成:

termsql -i mycsvfile.CSV -d ',' -c 'a,b' -t 'foo' -o mynewdatabase.db

于 2014-11-23T19:52:43.623 回答
3

我遇到了完全相同的问题(在 OS X Maverics 10.9.1 和 SQLite3 3.7.13 上,但我认为 SQLite 与原因无关)。我试图导入从 MS Excel 2011 保存的 csv 数据,顺便说一句。用作';'列分隔符。我发现 Excel 中的 csv 文件仍然使用 Mac OS 中的换行符 9 次,将其更改为 unix 换行符解决了这个问题。AFAIR BBEdit 和 Sublime Text 2 都有这个命令。

于 2014-01-12T13:51:48.140 回答
1

就我而言,我必须查看我试图添加的文件,它有标题,分隔符是分号;

我先试过:

.mode csv
.import myfile.csv mytable

但它没有用,所以我尝试了:

.separator ";"
.import myfile.csv mytable

它确实有效,所以我不得不手动设置分隔符。

于 2021-08-18T13:51:02.030 回答
1

正如一些网站和其他文章所指出的,这很简单。 https://www.sqlitetutorial.net/sqlite-import-csv/

我们不需要为csv文件指定分隔符,因为 csv 表示逗号分隔。

sqlite> .separator ,不需要这条线。

sqlite> create table cities(name, population);
sqlite> .mode csv
sqlite> .import c:/sqlite/city_no_header.csv cities

这将完美无缺:)

PS:我的 city.csv 带有标题。


name,population
Abilene,115930
Akron,217074
Albany,93994
Albuquerque,448607
Alexandria,128283
Allentown,106632
Amarillo,173627
Anaheim,328014
于 2020-04-22T20:02:16.110 回答
0

按照步骤:-

1] sqlite3 名称

2] .mode csv 表名

3] .import Filename.csv 表名

于 2020-04-22T11:34:09.563 回答