RMYSQL可写错误

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

我有以下R数据帧

 Sl NO  Name    Marks
 1        A      15
 2        B      20
 3        C      25

我有一个mysql表如下。 (Score.table)

   No   CandidateName   Score
   1       AA           1
   2       BB           2
   3       CC           3

我已使用此代码将我的数据框写入Score.table

    username='username'
    password='userpass'
    dbname='cdb'
    hostname='***.***.***.***'

    cdbconnection = dbConnect(MySQL(), user=username, password=userpass, 
    dbname=dbname, host=hostname)

接下来,我们将数据帧写入表中,如下所示

     score.table<-'score.table'

    dbWriteTable(cdbconn, score.table, dataframe, append =F, overwrite=T).

代码运行,我得到TRUE作为输出。但是,当我检查SQL表时,新值没有覆盖现有值。我请求有人帮助我。代码有效。我再次重新安装了RMySQL包并重新运行,结果是一样的。

r dataframe rmysql
1个回答
1
投票

没有发生更新表明RMySQL包无法成功地将数据框中的任何行映射到表中已有的记录。所以这意味着你对dbWriteTable的调用存在问题。我看到的两个潜在问题是你没有为field.typesrow.names分配值。考虑进行以下调用:

score.table <- 'score.table'
dbWriteTable(cdbconn, score.table, dataframe,
             field.types=list(`Sl NO`="int", Name="varchar(55)", Marks="int"),
             row.names=FALSE)

如果省略field.types,那么包将尝试推断出类型是什么。我不是这个包的专家,所以我不知道这个推断有多强大,但很可能你想要为复杂的更新查询指定显式类型。

更大的问题可能实际上不是为row.names指定一个值。它可以默认为TRUE,在这种情况下,包将在更新期间实际发送一个额外的列。这可能会导致问题,例如,如果目标表有三列,并且数据框也有三列,那么您尝试使用四列进行更新。

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