【问题标题】:Multiple DB connection in RR中的多个数据库连接
【发布时间】:2017-03-23 15:07:08
【问题描述】:

我想知道是否有人可以帮助解决这个烦人的问题。 我正在尝试创建/建立到不同数据库的多个连接。 我有一个带有 3 个名为 conf 的连接凭据的 data.frame - 如果我像这样手动输入连接变量,它就可以工作:

conn <- dbConnect(MySQL(), user=conf$user, password=conf$passws, host=conf$host, dbname=conf$db)

最终创建一个连接。 但是,我想要的是能够将连接称为:

conf$conn <- dbConnect(MySQL(), user=conf$user, password=conf$passws, host=conf$host, dbname=conf$db)

这是我收到的错误消息。 rep(value, length.out = nrows) 中的错误: 尝试复制“S4”类型的对象

我认为问题在于我如何添加 conf$conn

【问题讨论】:

  • 你没有告诉我们任何关于 conf 的事情。这在这里很重要。
  • conf 是否定义为列表?很难复制。这对我来说似乎没有错误:conf&lt;-list(); conf$con &lt;- dbConnect(RSQLite::SQLite(), ":memory:")
  • @MrFlick 谢谢,我看到你在 SQLite 上试过了 - 我在 MySQL 上......所以不确定它是如何应用的。
  • @HelenNeely 这根本不重要。似乎问题在于您出于某种原因尝试使用 data.frame 而不是列表。
  • 在我看来,更适合您需求的数据结构是列表。

标签: mysql r


【解决方案1】:

我使用了poolconfig 包的组合来解决类似的问题,以设置多个同时PostgreSQL 连接。请注意,此解决方案需要一个具有db1db2 连接属性的config.yml 文件。

library(pool)
library(RPostgreSQL)

connect <- function(cfg) {
  config <- config::get(config = cfg)
  dbPool(
    drv = dbDriver("PostgreSQL", max.con = 100),
    dbname = config$dbname,
    host = config$host,
    port = config$port,
    user = config$user,
    password = config$password
  )
}
conn <- lapply(c("db1", "db2"), connect)

【讨论】:

  • 感谢您的提示,会试一试并通知您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
相关资源
最近更新 更多