如何加快将CSV文件中的数据导入SQLite表(在Windows中)?

pre*_*bgg 6 csv sqlite import

当我在寻找创建和更新SQlite数据库以在Android应用程序中使用的工具时,我建议使用SQLite数据库浏览器.它有一个Windows GUI,功能相当强大,特别提供了一个菜单选项,可以将数据从CSV文件导入新表.

事实证明,这对于数据库的初始创建非常有用,并且每当我要添加新数据时,我一直使用CSV导入选项来更新数据库.

当只有少数记录要导入时,这种方法运行良好,但随着数据量的增长,这个过程变得非常缓慢.一个11,000条记录(800千字节)的数据文件大约需要10分钟才能导入我平均速度很慢的笔记本电脑.使用SQLite数据库浏览器删除旧表,运行导入命令,然后更正由import命令创建的新表的数据类型的整个过程最多需要15分钟.

如何加快进口?

Fra*_*itt 10

您可以使用内置的csv导入(使用sqlite3命令行实用程序):

create table test (id integer, value text);
.separator ","
.import no_yes.csv test
Run Code Online (Sandbox Code Playgroud)

在我的笔记本电脑上导入10,000条记录的时间不到1秒.

  • 谢谢你的及时回复。我认为 .import 可能会在数据包含逗号时出现问题,在这种情况下,最好使用制表符分隔的源数据。使用 `.mode tabs` 而不是 `.separator ","` 似乎有效。如何使用 .separator 命令指定制表符分隔? (2认同)
  • 您可以使用`.separator ' '`,其中单引号之间的字符是文字​​制表符。 (2认同)
  • 你也可以使用`.separator "\t"` (2认同)

pre*_*bgg 5

通过谷歌搜索,我发现有几个人问这个问题,但是我没有找到答案,用我能理解的简单术语列出一次.所以,我希望以下内容对您有所帮助.

命令行实用程序sqlite3.exe提供了一个非常简单的解决方案.SQLite数据库浏览器中的"导入CSV"选项如此之慢的原因是它在CSV文件中执行并向数据库提交一个单独的SQL"插入"语句.但是,sqlite3.exe包含一个"import"命令,它将一次性处理整个命令.更有甚者,这几乎是瞬间完成的:我的11,000条记录是在一秒钟之内完成的.

导入命令不像其他程序(如Excel)那样处理逗号,这有一点点缺点.例如,如果Excel中的单元格A1包含Joe Bloggs 并且单元格B1包含123 Main Street, Anytown 该行Joe Bloggs,"123 Main Street, Anytown" ,则将其导出为CSV文件,如下所示: 但是,如果您尝试使用sqlite3将其导入到2列表中,则sqlite3会报告错误,因为它会处理每个逗号作为字段分隔符,因此将尝试导入Joe Bloggs,"123 Main StreetAnytown"作为3个单独的字段.

因为文本字段(特别是在Excel中)包含选项卡是不常见的,所以通常可以通过使用一个文件来避免此问题,其中字段由制表符而不是逗号分隔.

由于sqlite3.exe可以执行任何SQL语句和许多其他命令(如'import'),因此非常灵活.但是,像我需要将分隔数据文件导入数据库表的例行工作可以通过以下方式自动执行:

  • 在小文本文件中列出SQL语句和sqlite3.exe命令,并将此文件作为命令行参数提供给sqlite3.exe

  • 编写一个简短的Windows(MS-DOS)批处理文件来运行带有指定命令列表的sqlite3.exe.

这些是我遵循的步骤:

  1. 下载并解压缩sqlite3.exe
  2. 将原始数据从逗号分隔值转换为制表符分隔值.
  3. 创建一个脚本文件,列出sqlite3.exe要执行的命令,如下所示:

    drop table tblTableName;

    create table tblTableName(_id INTEGER PRIMARY KEY, fldField1 TEXT, fldField2 NUMERIC, .... );

    .mode tabs

    .import SubfolderName/DataToBeImported.tsv tblTableName

    (注意:SQL语句后面跟一个分号; sqlite3.exe命令前面是句号(句点))

  4. 创建.bat文件,如下所示:

    cd "c:\users\UserName\FolderWhereSqlite3DatabaseFileAndScriptFileAreStored"

    sqlite3 DatabaseName < textimportscript.txt

设置完成后,每当我要添加新数据时,我需要做的就是运行批处理文件,并立即导入数据.