将 CSV 导入 SQLite

我正在尝试将一个 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

我甚至不知道为什么它会找到四列,六个数据和两个列。

220971 次浏览

我遇到了完全相同的问题(在 OS X Maverics 10.9.1和 SQLite3.7.13上,但我不认为 SQLite 与原因有关)。我试图导入从 MSExcel2011保存的 csv 数据,顺便说一下。使用 ';'作为列分隔符。我发现来自 Excel 的 csv 文件仍然使用来自 Mac OS 的换行符9次,将其改为 unix 换行符解决了这个问题。AFAIR BBEdit 有一个这样的命令,以及崇高文本2。

注释中也提到,SQLite 将您的输入看作1、25、62、7。我还遇到了一个问题,在我的案例中,通过将“分隔符”改为“解决了这个问题。模式 csv”。所以你可以试试:

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

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

——新版 sqlite3——

最新版本的 sqlite3可以为您创建表和列(如果您允许的话)。

你也可以跳过这一行”。如果在 import 语句的末尾附加“—— csv”,则为“ csv 模式”,如下所示:

sqlite> .import test.csv foo --csv

使用 Termsql,你只需要一行代码就可以完成:

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

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

我是这么做的。

  • 制作/转换 csv 文件,使用 tab (t)分隔,并且不要用任何引号括起来(sqlite 解释引号的字面意思——说的是旧文档)
  • 输入需要添加数据的 db 的 sqlite shell

    Sqlite > . 分隔符“ t”——重要! 应该用双引号 Sqlite > . import afile.csv tablename-to-import-to

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

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

在 Sqlite shell 中输入:

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

如果您的 Mac 上还没有安装 Sqlite,请运行

$ brew install sqlite3

你可能需要做一个网络搜索如何安装家酿。

如何导入 csv 文件到 sqlite3

  1. 创建数据库

    sqlite3 NYC.db
    
  2. Set the mode & tablename

    .mode csv tripdata
    
  3. Import the csv file data to sqlite3

    .import yellow_tripdata_2017-01.csv tripdata
    
  4. Find tables

    .tables
    
  5. Find your table schema

    .schema tripdata
    
  6. Find table data

    select * from tripdata limit 10;
    
  7. Count the number of rows in the table

    select count (*) from tripdata;
    

按照以下步骤:-

1] sqlite3名称

2] . mode csv tablename

3] . import Filename.csv tablename

正如一些网站和其他文章指定,它的简单看看这一个。 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

这将完美无缺地发挥作用:)

附注: 我的 cities.csv 带有页眉。


name,population
Abilene,115930
Akron,217074
Albany,93994
Albuquerque,448607
Alexandria,128283
Allentown,106632
Amarillo,173627
Anaheim,328014

在我的例子中,我必须看到我试图添加的文件,它有标题和分隔符是一个分号 ;

我先试了试:

.mode csv
.import myfile.csv mytable

但是没用,所以我试了:

.separator ";"
.import myfile.csv mytable

它确实起作用了,所以我不得不手动设置分离器。