RMySQL dbWriteTable 在 Windows 7 x64 上遇到文件路径问题

RMySQL dbWriteTable runs into problems with file path on Windows 7 x64

设置

我运行 MariaDB 5.5 的本地实例,我在其中创建了一个包含两个 table 的数据库。我必须用存储在几千个 .RData 文件中的数据来填充这些 table。每个文件存储 data.frames 几千到一百万多行。

使用 RMySQL 和函数 dbWriteTable 似乎是最直接的解决方案。我使用 RevolutionR 的 3.1.1 版本(8.0 测试版)。操作系统为Win7 x64.

MariaDB中的table有两列:IDVALUE,它的名字是TAB。要存储的数据在对象data.tab.

我做什么

我进行如下处理:

data.tab <- data.frame(ID = c(1:3), VAL = c(7:9))
db.con <- dbConnect(drv = MySQL(), user = "root", password = "myPasswrd", dbname="myDBname")
dbWriteTable(conn = db.con, name = "TAB", value = data.tab, append=TRUE, row.names=FALSE, field.types=character(ID="INT",VAL="FLOAT"))

或者等效地,通过我创建的临时 csv 文件:

dbWriteTable(conn = db.con, name = "TAB", value = 'tmp.csv', append=TRUE, row.names=FALSE, field.types=character(ID="INT",VAL="INT"))

问题

调用上面代码段中的第二行会导致抛出以下错误:

Error in .local(conn, statement, ...) : 
sdbi114c7f07039' not found (Errcode: 22)tempRtmpE9YwdP

调用第三行(通过临时 csv 文件)导致类似的错误,其中路径打印时反斜杠被删除。这原来与路径扩展有关。调试和打印 statement 产量:

"LOAD DATA LOCAL INFILE 'C:\TEMP\Rtemp\RtmpE9YwdP\rsdbi114c7f07039' INTO TABLE TAB LINES TERMINATED BY '\n' (ID, VALUE);"

因此,反斜杠 (\) 和 \r 的转义似乎是问题所在。不幸的是,我不知道该如何处理。

回溯(按调用顺序):

1: dbWriteTable(conn = db.con, name = "t_ftr", value = fut.tbl, append = TRUE, row.names = FALSE,
2: .valueClassTest({standardGeneric("dbWriteTable")}, "logical", "dbWriteTable")
3: is(object, Cl)
4: is(object, Cl)
5: .local(conn, name, value, ...)
6: dbGetQuery(conn, sql)
7: dbGetQuery(conn, sql)
8: dbSendQuery(conn, statement, ...)
9: .valueClassTest(standardGeneric("dbSendQuery"), "DBIResult", "dbSendQuery")
10: is(object, Cl)
11: is(object, Cl)
12: .local(conn, statement, ...)
13: .Call(RS_MySQL_exec, conn@Id, as.character(statement))

编辑

如果在 statement 的第 11 步的交互式调试器中,我将路径中的 \ 替换为 /,则数据将正确写入数据库。

似乎是 RMySQL 中的问题。我解决了这个问题并在 GitHub:

上提交了拉取请求

https://github.com/rstats-db/RMySQL/issues/29

对我来说,它现在可以在我的电脑上运行了。您可以编译安装the development version from GitHub,也可以等CRAN上发布新版本的包。

编辑:它现在在 CRAN 上,版本 0.10.1