将CSV导入SQLite

Mol*_*ers 100 sqlite

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

示例csv:

1,2
5,6
2,7
Run Code Online (Sandbox Code Playgroud)

示例命令:

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
Run Code Online (Sandbox Code Playgroud)

我甚至不确定为什么它会找到包含六个数据和两列的四列.有帮助吗?:)

Num*_*uis 132

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

sqlite> create table foo(a, b);
sqlite> .mode csv
sqlite> .import test.csv foo
Run Code Online (Sandbox Code Playgroud)

  • 对于通过搜索登陆此处的其他人,如果csv文件的第一行包含列名,则可以省略第一个`create table`命令,sqlite将使用csv文件中的列名. (74认同)
  • @ d33tah看看这些[例子](https://en.wikipedia.org/wiki/Comma-separated_values#Example).注意第一行如何包含列名称"Year","Make","Model","Description","Price"而不是实际数据.如果您的CSV文件就是这种情况,那么您不需要使用`create table`命令手动创建表.`.import`命令将使用文件中的第一行来确定列名并相应地创建表.您仍然必须在命令中包含表的_name_.相同的信息[来自SQLite文档](https://www.sqlite.org/cli.html#csv). (3认同)
  • @EarlCrapstone:你能详细说说吗?它似乎对我不起作用. (2认同)

gya*_*guy 24

这就是我做到的.

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

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

  • 讨论文件格式时,tsv != csv 请参阅 https://tools.ietf.org/html/rfc4180 (3认同)

luk*_*s_o 17

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

如果你再也没有做过sqlite的东西(比如我),这可能会为你节省一两个网页搜索:

在Sqlite shell中输入:

$ sqlite3 yourfile.sqlite
sqlite>  .mode csv
sqlite>  .import test.csv yourtable
sqlite>  .exit
Run Code Online (Sandbox Code Playgroud)

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

$ brew install sqlite3
Run Code Online (Sandbox Code Playgroud)

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

  • 如何处理“未转义”字符警报? (2认同)

小智 12

如何将csv文件导入sqlite3

  1. 创建数据库

    sqlite3 NYC.db
    
    Run Code Online (Sandbox Code Playgroud)
  2. 设置模式和表名

    .mode csv tripdata
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将csv文件数据导入sqlite3

    .import yellow_tripdata_2017-01.csv tripdata
    
    Run Code Online (Sandbox Code Playgroud)
  4. 查找表

    .tables
    
    Run Code Online (Sandbox Code Playgroud)
  5. 找到您的表架构

    .schema tripdata
    
    Run Code Online (Sandbox Code Playgroud)
  6. 查找表数据

    select * from tripdata limit 10;
    
    Run Code Online (Sandbox Code Playgroud)
  7. 计算表中的行数

    select count (*) from tripdata;
    
    Run Code Online (Sandbox Code Playgroud)


小智 5

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

  • 显然不是这样。在.import doc部分中:请注意,在运行“ .import”命令之前,将“ mode”设置为“ csv”非常重要。这对于防止命令行Shell尝试将输入文件文本解释为其他格式是必须的。 (6认同)
  • .mode仅用于输出 (3认同)

小智 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 都有一个用于此目的的命令。

  • 使用 `tr -s '\r' '\n'` 更容易,并且适用于各种随机文件。 (3认同)