我可以使用 R 中的 DBI 库将一个 SQLite 数据库附加到另一个数据库吗?
Can I attach one SQLite database to another with the DBI library in R?
我正在尝试将一个 SQLite 数据库附加到另一个数据库。在终端上,我可以使用 ATTACH
命令非常简单地完成此操作,但我在 R 脚本中工作,我想让它通过 DBI 连接工作。我已经能够附加系统调用,但是通过数据库连接来完成它会非常好。
DBI 连接尝试:
library(DBI)
NewDBFile <- "new.db"
archiveFile <- "archive.db"
con <- dbConnect(RSQLite::SQLite(), NewDBFile)
rs <- dbExecute(conn = con, paste0("ATTACH ", archiveFile, " AS archive;"))
dbDisconnect(con)
有了这个我得到一个“错误:没有这样的列:[数据库名称]”
关于我将如何做这件事有什么想法吗?
ATTACH
在 R 中的演示:
con1 <- DBI::dbConnect(RSQLite::SQLite(), "dat1.sqlite3")
DBI::dbWriteTable(con1, "tbl1", data.frame(id=1:3, aa=1:3))
con2 <- DBI::dbConnect(RSQLite::SQLite(), "dat2.sqlite3")
DBI::dbWriteTable(con2, "tbl2", data.frame(id=1:3, bb=11:13))
DBI::dbExecute(con1, "attach database 'dat2.sqlite3' as dat2")
# [1] 0
DBI::dbGetQuery(con1, "
select t1.*, t2.bb
from tbl1 t1
left join dat2.tbl2 t2 on t1.id=t2.id")
# id aa bb
# 1 1 1 11
# 2 2 2 12
# 3 3 3 13
顺便说一句,这不会在单个查询中显示附加表:
DBI::dbGetQuery(con1, "select * from sqlite_master")
# type name tbl_name rootpage sql
# 1 table tbl1 tbl1 2 CREATE TABLE `tbl1` (\n `id` INTEGER,\n `aa` INTEGER\n)
DBI::dbGetQuery(con1, "select * from dat2.sqlite_master")
# type name tbl_name rootpage sql
# 1 table tbl2 tbl2 2 CREATE TABLE `tbl2` (\n `id` INTEGER,\n `bb` INTEGER\n)
我的基本信息:
packageVersion("DBI")
# [1] '1.1.1'
packageVersion("RSQLite")
# [1] '2.2.1'
R.version
# _
# platform x86_64-w64-mingw32
# arch x86_64
# os mingw32
# system x86_64, mingw32
# status
# major 4
# minor 0.5
# year 2021
# month 03
# day 31
# svn rev 80133
# language R
# version.string R version 4.0.5 (2021-03-31)
# nickname Shake and Throw
我正在尝试将一个 SQLite 数据库附加到另一个数据库。在终端上,我可以使用 ATTACH
命令非常简单地完成此操作,但我在 R 脚本中工作,我想让它通过 DBI 连接工作。我已经能够附加系统调用,但是通过数据库连接来完成它会非常好。
DBI 连接尝试:
library(DBI)
NewDBFile <- "new.db"
archiveFile <- "archive.db"
con <- dbConnect(RSQLite::SQLite(), NewDBFile)
rs <- dbExecute(conn = con, paste0("ATTACH ", archiveFile, " AS archive;"))
dbDisconnect(con)
有了这个我得到一个“错误:没有这样的列:[数据库名称]”
关于我将如何做这件事有什么想法吗?
ATTACH
在 R 中的演示:
con1 <- DBI::dbConnect(RSQLite::SQLite(), "dat1.sqlite3")
DBI::dbWriteTable(con1, "tbl1", data.frame(id=1:3, aa=1:3))
con2 <- DBI::dbConnect(RSQLite::SQLite(), "dat2.sqlite3")
DBI::dbWriteTable(con2, "tbl2", data.frame(id=1:3, bb=11:13))
DBI::dbExecute(con1, "attach database 'dat2.sqlite3' as dat2")
# [1] 0
DBI::dbGetQuery(con1, "
select t1.*, t2.bb
from tbl1 t1
left join dat2.tbl2 t2 on t1.id=t2.id")
# id aa bb
# 1 1 1 11
# 2 2 2 12
# 3 3 3 13
顺便说一句,这不会在单个查询中显示附加表:
DBI::dbGetQuery(con1, "select * from sqlite_master")
# type name tbl_name rootpage sql
# 1 table tbl1 tbl1 2 CREATE TABLE `tbl1` (\n `id` INTEGER,\n `aa` INTEGER\n)
DBI::dbGetQuery(con1, "select * from dat2.sqlite_master")
# type name tbl_name rootpage sql
# 1 table tbl2 tbl2 2 CREATE TABLE `tbl2` (\n `id` INTEGER,\n `bb` INTEGER\n)
我的基本信息:
packageVersion("DBI")
# [1] '1.1.1'
packageVersion("RSQLite")
# [1] '2.2.1'
R.version
# _
# platform x86_64-w64-mingw32
# arch x86_64
# os mingw32
# system x86_64, mingw32
# status
# major 4
# minor 0.5
# year 2021
# month 03
# day 31
# svn rev 80133
# language R
# version.string R version 4.0.5 (2021-03-31)
# nickname Shake and Throw