【问题标题】:Perl dbd-sqlite, is there a equivalent to the .import function?Perl dbd-sqlite,是否有等效于 .import 函数?
【发布时间】:2018-11-22 02:27:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: perl sqlite dbi dbd


    【解决方案1】:

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

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

    【讨论】:

    • INSERT 不会创建架构。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-20
      相关资源
      最近更新 更多