【问题标题】:Read binary blob field in R from an sqlite database从 sqlite 数据库中读取 R 中的二进制 blob 字段
【发布时间】:2015-01-14 14:17:38
【问题描述】:

我想从 R 的 sqlite 数据库中读取二进制字段。

我通过一种间接方法成功了,包括首先通过调用 sqlite3 的 shell 命令将二进制字段导出到临时文件中,然后使用 readbin() 命令读取此二进制文件。详细代码如下:

library(RSQLite)
fileConn<-file("script.sql")
writeLines(c('.load fileio.dll','SELECT writefile("tmp.bin",Curve) FROM Table1 WHERE Id=41;','.exit'), fileConn)
close(fileConn)

shell('sqlite3.exe database.sqlite < script.sql')

to.read<-file(description="tmp.bin","rb")
tmp<-readBin(to.read,"integer",n=10000,size=2)
plot(tmp)
close(to.read)

我想用 R 直接读取二进制字段,而不是通过 sqlite3 创建临时文件。

根据建议(非常感谢!),我尝试了以下方法:

con <- dbConnect(SQLite(),dbname="database.sqlite")
tmp<-dbGetQuery(con,"SELECT quote(Curve) FROM Table1 WHERE Id=41")
tmp

返回:

quote(Curve)
1             '\023'

看起来不太好,因为我应该得到一个包含 870 个整数元素的向量,以 :

开头
head(good)
[1] 19 19  0 19 19 19

我的 sql 语句出了什么问题?如何使用 R 直接读取二进制字段?

非常感谢您

【问题讨论】:

  • 之后你可以base::unlink这个文件吗?
  • dbGetQuery(con,'SELECT 有什么不适合你的?

标签: r sqlite blob


【解决方案1】:

How to write binary data into SQLite with R DBI's dbWriteTable()? 中的解决方案类似,您可以使用quote() function 将blob 转换为blob literal。 也就是执行类似

的查询
SELECT quote(Curve) FROM Table1 WHERE ID = 41

结果是表单中的字符串

X'1234ABCD....'

然后您必须将十六进制数字转换回二进制数据。

【讨论】:

  • “然后您必须将十六进制数字转换回二进制数据。”你将如何在 R 中做到这一点?
  • 链接问题的答案显示了如何将十六进制表示转换为原始字节。
  • 我已经多次阅读链接的答案,但仍然无法判断哪个部分正在进行实际转换。你能指出来,或者举一个简单的例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 2013-07-28
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多