在我的许多脚本中,我使用 sqlite 来报告信息,我需要首先上传我的大表数据(数百万个 csv 行)。在过去,我发现 .import 比逐行插入(即使使用事务)更快。
现在我的脚本实现了一个系统调用的方法sqlite3 db '.import ....'
。我想知道是否可以从 dbd-sqlite 调用 .import。还是继续从系统调用插入会更好?
PD:想要从 dbd-sql 内部调用 .import 的原因是当我的软件安装在其他地方时删除 sqlite3 依赖项。
.import
是特定于 SQLite 的命令,因此您不会找到独立于数据库驱动程序的 DBI 方法;尽管几乎可以肯定任何给定的数据库引擎都具有等效的功能,但每个引擎都会以不同的方式实现它(例如 SQLite.import
与 MySQLLOAD DATA INFILE
等)
如果您正在寻找真正的引擎独立性,您将需要通过INSERT
查询导入数据,在最简单的情况下可以依赖它在任何地方或多或少地等效地工作。但是,如果执行时间的差异足够显着,可能值得您为导入功能编写一个与引擎无关的接口,其中包含每个引擎的特定导入命令的包装器,并从当前活动的数据库驱动程序(或其他一些方法,具体取决于您的代码)在运行时调用的包装器。
如果你不反对“炮轰”
perl -e 'system(qq(sqlite3 foo.db ".import file.dat table")) 和死 $!'