【问题标题】:Import BLOBs from a CSV to an SQLite table将 BLOB 从 CSV 导入 SQLite 表
【发布时间】:2018-11-28 22:47:35
【问题描述】:

我应该如何将 UUID 放入 CSV 文件以使 SQLite .import 命令将它们作为 128 位 BLOB 加载到表中?

【问题讨论】:

    标签: sqlite csv import blob uuid


    【解决方案1】:

    据我所知,从 sqlite3 shell 生成 blob 的唯一方法是使用 zeroblob()randomblob()readfile() sql 函数、CASTing 值或作为基数为 16 的 blob文字(X'1234ABCD')。

    如果您的 UUID 已经在 CVS 文件中表示为大端 128 位二进制数,您可能可以在导入后执行UPDATE table SET uuid = CAST(uuid AS BLOB); 之类的操作。如果它们是像 123e4567-e89b-12d3-a456-426655440000 这样的文本表示,您可以编写一个用户定义的函数来进行转换,并将其与类似的导入后 UPDATE 一起使用。

    【讨论】:

    • 关于您描述的第一种情况,我无法导入 128 位二进制数,因为 SQLite 没有这种类型。我将了解如何告诉导入器将 UUID 字符串视为十六进制表示的二进制数据。
    【解决方案2】:

    SQLite 无法从 CSV 导入 BLOB。

    解决方法是将CSV转换为SQL语句文件并执行:

    sqlite3 database.db < database.sql
    

    如果您从应用程序管道,100000-row 块是每个流程实例的最佳数量。

    如果您尝试一次传输多个 GB,sqlite3 将崩溃并出现 Out of memory 错误。

    【讨论】:

      猜你喜欢
      • 2012-09-14
      • 1970-01-01
      • 2012-05-15
      • 2011-04-16
      • 2013-02-03
      • 1970-01-01
      • 2012-03-08
      • 2014-05-15
      • 2015-09-23
      相关资源
      最近更新 更多