Perl dbd-sqlite,是否有等效的.import函数?

时间:2013-07-15 17:27:38

标签: perl sqlite dbi dbd

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

现在我的脚本实现了一个为sqlite3 db '.import ....'进行系统调用的方法。我想知道是否可以从dbd-sqlite调用.import。或者最好继续从系统调用insert?。

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

2 个答案:

答案 0 :(得分:1)

.import是一个特定于SQLite的命令,因此您将找不到独立于数据库驱动程序的DBI方法;虽然任何给定的数据库引擎几乎肯定都具有相同的功能,但每个引擎都会以不同的方式实现它(例如SQLite .import vs MySQL LOAD DATA INFILE,& c。)

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

答案 1 :(得分:0)

如果您不反对“炮击”
perl -e'system(qq(sqlite3 foo.db“ .import file.dat table”))并死掉$!'