【问题标题】:Looping over database connections循环数据库连接
【发布时间】:2017-12-09 20:53:12
【问题描述】:

我创建了 12 个 MySQL 数据库连接:

mydb1 = dbConnect(MySQL(), user='user', password=password, dbname='db',host='domain')
mydb2...  
mydb3...  
...
mydb12...

我有一个脚本,我想在其中对所有 12 个数据库执行相同的查询并遍历它们。如何将dbConnect 对象成功传递给dbSendQuery

items <- ls()[grep("mydb",ls())]
query <- dbSendQuery(items[1], "SELECT * FROM table") 

给我错误:

(function (classes, fdef, mtable) 中的错误:无法找到 用于签名的函数“dbSendQuery”的继承方法 ‘‘字符’,‘字符’’

【问题讨论】:

    标签: mysql r


    【解决方案1】:

    您不能将连接对象的文本表示传递给数据库函数。你的电话类似于dbSendQuery("mydb1", "select * from table"),我猜你不会按字面输入。

    最终你想要处理list 的连接,你可以手动形成

    conns <- list(mydb1, mydb2, ...)
    

    但如果这很困难,或者您想更加程序化,请尝试

    conns <- lapply(ls()[grep("mydb",ls())], get)
    

    然后

    results <- lapply(conns, function(con) dbSendQuery(con, "select * from ..."))
    

    【讨论】:

    • 所以在尝试了这个items &lt;- list(mydb1,mydb2,mydb3,mydb4,mydb5,mydb6,mydb7,mydb8,mydb9,mydb10,mydb11,mydb12) result1 &lt;- dbSendQuery(items[1], "SELECT...之后我得到了错误(函数(类,fdef,mtable):无法为签名“列表”,“字符”找到函数“dbSendQuery”的继承方法' 。在你的上一个陈述中,你正在做的事情是我遗漏的吗?
    • 请阅读完整的答案,我从未建议过您的result1 &lt;- ... 命令。
    • r2evans 我确实阅读了整个答案,我感到困惑的是您的results &lt;- 行与我的result1 &lt;- 行有何不同。 R 显然在这两个看似相同的操作中以不同的方式处理数据类型,这就是我需要帮助的地方。
    • 哦,我明白了。您是否使用双括号进行索引?看看items[1],然后看看items[[1]],看看有什么不同。 (见?Extract。)
    • 如果你想在多个其他相同的对象上做同样的事情,我强烈建议你考虑使用lapply(或相关的矢量化函数)。如果我可以问一下,您为什么选择lapply-aversion?
    猜你喜欢
    • 2018-01-09
    • 2022-10-14
    • 1970-01-01
    • 2015-10-20
    • 2021-11-27
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2019-08-18
    相关资源
    最近更新 更多