【问题标题】:import CSV into SQLite WITHOUT a table schema在没有表模式的情况下将 CSV 导入 SQLite
【发布时间】:2010-12-19 04:50:38
【问题描述】:

我知道我可以通过以下方式将 .csv 文件导入到 sqlite 数据库中的预先存在的表中:

.import filename.csv tablename

但是,是否有这样的方法/库可以自动创建表(及其架构),这样我就不必手动定义:column1 = string, column2 = int .. ..等等

或者,也许我们可以将所有内容都导入为字符串。就我有限的理解,sqlite3 似乎将所有字段都视为字符串?

编辑: 每列的名称在这里并不那么重要(假设我们可以从 CSV 文件的第一行中获取该数据,或者它们可以是任意名称)关键是要识别每个列的值类型列。

【问题讨论】:

  • 它应该如何知道字段的名称?这些在 .csv 中吗?
  • 从第一行开始(像大多数 CSV 文件一样)。但在这种情况下,名称相当微不足道。关键问题是识别字段类型。

标签: c objective-c database sqlite csv


【解决方案1】:

这对我来说似乎很好用(在 sqlite3 版本 3.8.4 中):

$ echo '.mode csv
>       .import data_with_header.csv some_table' | sqlite3 db

它创建表some_table,其字段名称取自data_with_header.csv 文件的第一行。所有字段的类型均为TEXT

【讨论】:

  • 如果“关键是识别每一列的值类型”,那么导入 *.csv 文件没有帮助,因为每一列都变成了相同的 TEXT 类型。我从未见过包含每列正确类型的 *.csv。
  • @PeterCo 我的答案是在编辑原始问题之前提交的
【解决方案2】:

您在评论中说自己确定列的类型是一个不平凡的问题。 (想象一百万行看起来都像数字,但其中一行有一个 Z。 - 现在该行必须输入“字符串”。)

虽然不简单,但让 90% 的场景发挥作用也很容易。我只想写一个小 Python 脚本来做到这一点。 Python 有一个非常好的解析 CSV 文件的库,它与 sqlite 的接口非常简单。

只需加载 CSV,猜测并检查列类型。设计一个封装此信息的create table,然后发出您的insert intos。我无法想象这会占用超过 20 行 Python 代码。

【讨论】:

    【解决方案3】:

    这有点离题,但它可能有助于使用一个工具,该工具可为您提供单个 csv 文件的所有 SQL 功能,而无需实际直接使用 SQLite。

    看看 TextQL - 一个允许直接查询 csv 文件的实用程序,它在内存中使用 SQLite 引擎: https://github.com/dinedal/textql

    textql -header -sql "select * from tbl" -source some_file.csv

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 2018-11-10
      • 2019-11-30
      • 1970-01-01
      • 2021-03-22
      • 2017-06-03
      相关资源
      最近更新 更多