【问题标题】:RMySQL - dbWriteTable() - The used command is not allowed with this MySQL versionRMySQL - dbWriteTable() - 此 MySQL 版本不允许使用的命令
【发布时间】:2019-03-09 11:48:35
【问题描述】:

我正在尝试将一些 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


    【解决方案1】:

    我在我的系统上通过将以下行添加到服务器上的 my.cnf 文件中解决了这个问题(您可能需要使用 root 和 vi 来编辑!)。在我看来,它就在 '[mysqld]' 行的下方

    local-infile=1
    

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

    【讨论】:

      【解决方案2】:

      您可能需要更改 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

      【讨论】:

        猜你喜欢
        • 2015-04-17
        • 2012-09-30
        • 2013-08-28
        • 2014-11-10
        • 2017-04-06
        • 2015-10-10
        • 2012-11-24
        • 2020-04-28
        • 1970-01-01
        相关资源
        最近更新 更多