如何在RStudio中加载加密的sqlite文件?

rsaldnfx  于 2023-01-13  发布在  SQLite
关注(0)|答案(1)|浏览(235)

描述:我正在使用RStudio,我有一个名为databse.zip的zip文件,这个文件是用密码加密的,我的目标是能够加载这个文件,解密它,提取其中的sqlite数据库(database.db),并能够对它进行查询。

到目前为止,我尝试了以下方法:

# Load required packages
library(dotenv)
library(Hmisc)
library(RSQLite)

# Get password
password = Sys.getenv("PASSWORD")

# Load .zip file and decrypt it
test = getZip("databse.zip", password=password)

# Connect to the SQLite database
con = dbConnect(RSQLite::SQLite(), test) # ERROR! Error in path.expand(path) : invalid 'path' argument

# Get list of items from table in the database
my_data = dbGetQuery(con, "SELECT column_name FROM table") # I do not even reach this point

问题:基本上,我能够加载和解密文件,但我不知道如何连接到sqlite数据库并查询它。
问题:你能建议一个聪明优雅的方法来实现我的目标吗?如果需要,请随意使用不同的软件包。

e5nqia27

e5nqia271#

getZip()用于流式传输单个文件格式zip存档的内容,而无需首先将其存储在磁盘上,它返回连接对象。这将适用于压缩的csv-s等平面文件,同时将其用于read.csv()等。对于DBI / RSQLite,您(通常)需要在磁盘上有一个文件。
由于R不能原生地处理密码保护的zip压缩文件,我们使用7z,尽管任何其他合适的命令行提取器也可以工作(例如,在Win的情况下,从rtools解压缩)。
这里我们首先创建一个有密码保护的zip arhive来创建一个可复制的示例,然后将其解压缩到R session tmp.目录中的extracted/并连接到解压缩后的SQLite数据库。

library(DBI)
library(glue)

# 7z executable
sevenz <- "C:/Program Files/7-Zip/7z.exe"
archive_pw <- "pw123"

tmp_dir <- tempdir()
# open temp folder in file manager :
# browseURL(tmp_dir)

# prepare reprex ----------------------------------------------------------
# store mtcars in sqlite, create pasword-protected zip archive

sqlite_f <- file.path(tmp_dir, "mtcars.sqlite")
con <- dbConnect(RSQLite::SQLite(), sqlite_f)
data("mtcars")
dbWriteTable(con, "mtcars", mtcars)
dbDisconnect(con)
# double-quotes to handle spaces in paths
system(glue('"{sevenz}" a "{sqlite_f}.zip" "{sqlite_f}" -p"{archive_pw}"' ))
#> [1] 0

# extract and load sqlite DB from password-protected zip ------------------

dest <- file.path(tmp_dir, "extracted")
system(glue('"{sevenz}" e "{sqlite_f}.zip" -o"{dest}" -p"{archive_pw}"' ))
#> [1] 0
con <- dbConnect(RSQLite::SQLite(), file.path(dest, "mtcars.sqlite"))
dbGetQuery(con, "SELECT * FROM mtcars LIMIT 5")
#>    mpg cyl disp  hp drat    wt  qsec vs am gear carb
#> 1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#> 2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#> 3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#> 4 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#> 5 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
dbDisconnect(con)

创建于2023年1月10日,使用reprex v2.0.2

相关问题