3

在我的许多脚本中,我使用 sqlite 来报告信息,我需要首先上传我的大表数据(数百万个 csv 行)。在过去,我发现 .import 比逐行插入(即使使用事务)更快。

现在我的脚本实现了一个系统调用的方法sqlite3 db '.import ....'。我想知道是否可以从 dbd-sqlite 调用 .import。还是继续从系统调用插入会更好?

PD:想要从 dbd-sql 内部调用 .import 的原因是当我的软件安装在其他地方时删除 sqlite3 依赖项。

4

2 回答 2

1

.import是特定于 SQLite 的命令,因此您不会找到独立于数据库驱动程序的 DBI 方法;尽管几乎可以肯定任何给定的数据库引擎都具有等效的功能,但每个引擎都会以不同的方式实现它(例如 SQLite.import与 MySQLLOAD DATA INFILE等)

如果您正在寻找真正的引擎独立性,您将需要通过INSERT查询导入数据,在最简单的情况下可以依赖它在任何地方或多或少地等效地工作。但是,如果执行时间的差异足够显着,可能值得您为导入功能编写一个与引擎无关的接口,其中包含每个引擎的特定导入命令的包装器,并从当前活动的数据库驱动程序(或其他一些方法,具体取决于您的代码)在运行时调用的包装器。

于 2013-07-15T18:35:50.633 回答
1

如果你不反对“炮轰”
perl -e 'system(qq(sqlite3 foo.db ".import file.dat table")) 和死 $!'

于 2018-11-21T18:27:29.780 回答