RMySQL - dbWriteTable() - 此MySQL版本不允许使用该命令

问题描述 投票:2回答:2

我试图将一些excel文件读入数据帧,然后写入MySQL数据库。以下程序能够读取文件并创建数据帧但是当它尝试使用dbWriteTable命令写入数据库时​​,我收到一条错误消息 - Error in .local(conn, statement, ...) : could not run statement: The used command is not allowed with this MySQL version

library(readxl)
library(RMySQL)
library(DBI)
mydb = dbConnect(RMySQL::MySQL(), host='<ip>', user='username', password='password', dbname="db",port=3306)
setwd("<directory path>")

file.list <- list.files(pattern='*.xlsx')
print(file.list)

dat = lapply(file.list, function(i){
print(i);
x = read_xlsx(i,sheet=NULL, range=cell_cols("A:D"), col_names=TRUE, skip=1, trim_ws=TRUE, guess_max=1000)
x$file=i
x
})

df = do.call("rbind.data.frame", dat) 

dbWriteTable(mydb, name="table_name", value=df,  append=TRUE ) 

dbDisconnect(mydb) 

我检查了dbWriteTable函数的定义,看起来它正在使用load data local inpath将数据存储在数据库中。根据Stackoverflow上的一些其他回答问题,我理解local这个词可能引起关注,但由于它已经在函数定义中,我不知道我能做什么。此外,此语句使用“,”作为分隔符。但是我的数据在某些值中有“,”这就是为什么我对使用数据帧感兴趣,希望它能保留源结构。但现在我不太确定。有没有其他方法/函数将数据帧写入MySQL表?

mysql r rmysql
2个回答
2
投票

我通过在服务器上的my.cnf文件中添加以下行来解决这个问题(您可能需要使用root和vi进行编辑!)。在我的这个位于'[mysqld]'线下面

local-infile=1

然后重启服务器。祝好运!


1
投票

您可能需要将dbWriteTable(mydb, name="table_name", value=df, append=TRUE )更改为

dbWriteTable(mydb, name="table_name", value=df,field.types = c(artist="varchar(50)", song.title="varchar(50)"), row.names=FALSE, append=TRUE)

这样,您可以在R中指定字段类型并将数据附加到MySQL表中。

来源:Unknown column in field list error Rmysql

© www.soinside.com 2019 - 2024. All rights reserved.