我知道我可以通过以下方式将.csv文件导入sqlite数据库中的预先存在的表:
.import filename.csv tablename
但是,是否有这样的方法/库可以自动创建表(及其模式),这样我就不必手动定义:column1 = string,column2 = int .. ..等
或者,也许我们可以将所有内容导入为字符串。根据我的有限理解,sqlite3似乎将所有字段都视为字符串?
编辑: 这里的每个列的名称都不是那么重要(假设我们可以从CSV文件的第一行获取数据,或者它们可以是任意名称)关键是识别每个列的值类型列。
答案 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