【发布时间】:2012-07-10 17:43:51
【问题描述】:
背景:
我正在使用 RMySQL 来查询数据库;我已经用带引号的字符串成功地做到了这一点,但我现在想从 .sql 文件发送更长的查询。
sql文件在mypackage/inst/extdata/myquery.sql
问题:
从myquery.sql 导入查询并将其提交到数据库的最佳方法是什么?
我尝试过的:
这是我正在处理的功能:
library(RMySQL)
library(mypackage)
myqueryfun <- function(...){
file <- system.file("extdata", "myquery.sql", package = "mypackage")
query <- SOMEFUN(file)
con <- dbConnect(...)
q <- dbSendQuery(con, query)
result <- fetch(q, n = -1)
return(result)
}
所以,我正在寻找函数SOMEFUN 及其附加参数。我尝试过scan 和readLines,并且我尝试了这些函数的不同参数,例如scan(file, sep = '\n', what = 'character') 我得到的最接近的是writeLines(readLines(file)),但是我遇到了一些与解析文件相关的错误,例如回复writeLines(readLines()):
Error in function (classes, fdef, mtable) :
unable to find an inherited method for function "dbSendQuery", for signature "MySQLConnection", "NULL"
Called from: stop("unable to find an inherited method for function \"", fdef@generic,
"\", for signature ", cnames)
如果查询是长度为 1 的字符向量,例如 "show tables;",我会得到预期的输出。
【问题讨论】:
-
我想你已经回答了你自己的问题。从文件读取的结果应该是长度为 1 的字符向量。因此,您可以在
scan或readLines的结果上使用paste(..., collapse="")将文件折叠成单个字符串。