将CSV导入SQLite而不使用表模式

时间:2009-11-22 10:46:26

标签: c objective-c database sqlite csv

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

.import filename.csv tablename

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

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

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

3 个答案:

答案 0 :(得分:1)

你在评论中说自己确定列的类型是一个非常重要的问题。 (想象一百万行看起来都像数字,但其中一行有一个Z. - 现在该行必须输入“string”。)

尽管非常重要,但90%的情景也很容易实现。我会写一个小的Python脚本来做到这一点。 Python有一个非常好的库来解析CSV文件,它的sqlite接口很简单。

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

这有点偏离主题,但它可能有助于使用一个工具,它可以在单个csv文件上提供所有SQL功能,而无需直接使用SQLite。

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

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