【问题标题】:Import CSV to SQLite将 CSV 导入 SQLite
【发布时间】:2013-02-03 13:39:39
【问题描述】:

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

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

【问题讨论】:

  • 该命令似乎需要第一行中的列标题,并且行终止符没有被识别为这样。 6 - 2 = 4
  • 我可以指定一个行终止符还是我的 csv 中缺少一个?
  • 您似乎无法从 SQLite 命令行工具中指定行终止符。您是否有一个文本编辑器(如 Windows 上的记事本,但更好)可以显示行终止字符?主要有三种变化:Windows 上的\r\n、*nix 上的\n(包括较新的 Mac)、较旧的 Mac 上的 \r
  • 我正在使用 BBEdit,但在行尾看不到任何这些字符。我尝试手动添加它们,但它似乎没有做任何事情......
  • 本网站可以将 CSV(或 Excel)文件转换为 SQLite - converttosqlite.com

标签: sqlite


【解决方案1】:

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

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

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

【讨论】:

  • 对于通过搜索到达这里的其他人,如果您的 csv 文件的第一行包含列名,那么您可以省略第一个 create table 命令,sqlite 将使用来自csv 文件。
  • @EarlCrapstone:你能详细说明一下吗?它似乎对我不起作用。
  • @d33tah 看看这些examples。注意第一行如何包含列名Year,Make,Model,Description,Price 而不是实际数据。如果您的 CSV 文件属于这种情况,则无需使用 create table 命令手动创建表。 .import 命令将使用文件中的第一行来确定列名并相应地创建表。您仍然必须在命令中包含表的 name。相同的信息from the SQLite docs
  • 你为什么要设置.mode?不就是为了输出吗?
  • 如果您发现生成的表将多个列组合在一起,请检查您没有使用保留字,例如 type 作为 CSV 列名。
【解决方案2】:

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

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

在 Sqlite shell 中输入:

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

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

$ brew install sqlite3

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

【讨论】:

  • 如何处理unescaped " character警报?
  • 如果在导入前创建表,则不会查找表头。
  • 我必须将文件放在 sqlite3.exe 所在的同一文件夹中。我可以为 csv 文件使用其他路径吗?
  • 次要问题:“如果你的 Mac 上没有安装 Sqlite”... AFAIK 默认安装。
  • 所有列都是文本列。如果定量数据事先输入表定义的工作量可能会减少,尽管开源 GUI 工具“DB Browser for SQLite”可以动态更改列类型。
【解决方案3】:

我是这样做的。

  • 制作/转换 csv 文件以制表符 (\t) 分隔且不包含在任何引号中(sqlite 从字面上解释引号 - 旧文档说)
  • 输入需要添加数据的db的sqlite shell

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

【讨论】:

  • 对于多行,我的tsv需要用这个命令指定ROW分隔符.separator "\t" "\r"
  • 在讨论文件格式时,tsv != csv 见tools.ietf.org/html/rfc4180
【解决方案4】:

如何将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;
    

【讨论】:

    【解决方案5】:

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

    【讨论】:

    • .mode 仅用于输出
    • 显然不是这样。从 .import doc 部分:请注意,在运行“.import”命令之前将“mode”设置为“csv”很重要。这对于防止命令行 shell 尝试将输入文件文本解释为其他格式是必要的。
    【解决方案6】:

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

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

    【讨论】:

    • 链接已损坏,将其更改为 github repo - 请澄清!
    【解决方案7】:

    我遇到了完全相同的问题(在 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' 更容易使用,并且可以处理各种随机文件。
    【解决方案8】:

    在我的情况下,我必须查看我尝试添加的文件,它有标题,分隔符是分号 ;

    我先试了:

    .mode csv
    .import myfile.csv mytable
    

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

    .separator ";"
    .import myfile.csv mytable
    

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

    【讨论】:

      【解决方案9】:

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

      【讨论】:

      • 最后别忘了运行.save someFileName。花了我一个小时才找到这个,最终将内存数据库文件导出到磁盘?
      【解决方案10】:

      按照以下步骤操作:-

      1] sqlite3 名称

      2] .mode csv 表名

      3] .import Filename.csv 表名

      【讨论】:

        猜你喜欢
        • 2015-09-23
        • 2012-09-14
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-28
        • 2011-04-16
        • 2017-03-25
        相关资源
        最近更新 更多