微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Dbplyr: in_schema 为两个不同的数据库使用相同的连接

如何解决Dbplyr: in_schema 为两个不同的数据库使用相同的连接

这里不解释原因,我需要使用同一个连接对象来读取dbplyr中的两个数据库。我找到了一些在线资源,但我没有做对。 请看看下面的reprex。 谁能告诉我我做错了什么? 非常感谢!

library(tidyverse)
library(DBI) # main DB interface
library(dbplyr) # dplyr back-end for DBs
#> 
#> Attaching package: 'dbplyr'
#> The following objects are masked from 'package:dplyr':
#> 
#>     ident,sql
library(Rsqlite)


##create the databases

df1 <- tibble(x=1:20,y=rep(c("a","b"),10))


df2 <- tibble(x=101:120,y=rep(c("d","e"),10))


con <- dbConnect(drv=Rsqlite::sqlite(),dbname="db1.sqlite")

dbWriteTable(con,"mydata1",df1,overwrite=T)

dbdisconnect(con) # closes our DB connection



con <- dbConnect(drv=Rsqlite::sqlite(),dbname="db2.sqlite")

dbWriteTable(con,"mydata2",df2,overwrite=T)

dbdisconnect(con) # closes our DB connection


## Now that I have created the two databases,I try reading them with the same connection object

con <- dbConnect(drv=Rsqlite::sqlite())


db1 <- tbl(con,in_schema("db1.sqlite","mydata1"))
#> Error: no such table: db1.sqlite.mydata1
db2 <- tbl(con,in_schema("db2.sqlite","mydata2"))
#> Error: no such table: db2.sqlite.mydata2


### but this fails miserably. How to fix it?

reprex package (v0.3.0) 于 2020 年 12 月 24 日创建

解决方法

您的 R 语法没有任何问题。我对 SQL Server 环境中的多个数据库使用基本相同的方法。

这是一个数据库配置问题。您的两个数据库未设置为单个查询可以访问两个数据库中的表。

对于 SQLite,它看起来可以使用 ATTACH 命令在本机 SQL(而不是通过 R)中完成(请参阅 this 接受的答案)。您可能还会发现 this 问题很有帮助。这两个问题都涉及直接编写 SQL,我建议您在初次尝试时使用它,因为它避免了涉及 R 的附加层。

如果您只想通过 R 执行此操作,则它可能类似于以下内容:

con <- dbConnect(drv=RSQLite::SQLite(),dbname="db1.sqlite")

dbExecute(con,"attach 'db2.sqlite' as db2;")

# test query
test_query = paste("SELECT COUNT(*) AS num FROM db1.mydata1","\n"
                   "UNION ALL","\n"
                   "SELECT COUNT(*) AS num FROM db2.mydata2")
dbGetQuery(con,test_query)

如果最后一条命令有效,那么您就知道 SQL 查询(现在)可以访问两个数据库,因此您可以尝试使用 in_schema 连接到两个数据库。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?