首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RMYSQL可写错误

RMYSQL可写错误
EN

Stack Overflow用户
提问于 2017-12-27 06:31:01
回答 1查看 168关注 0票数 1

我有下面的R数据

代码语言:javascript
复制
 Sl NO  Name    Marks
 1        A      15
 2        B      20
 3        C      25

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

代码语言:javascript
复制
   No   CandidateName   Score
   1       AA           1
   2       BB           2
   3       CC           3

我使用以下代码将我的数据写入Score.table

代码语言:javascript
复制
    username='username'
    password='userpass'
    dbname='cdb'
    hostname='***.***.***.***'

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

接下来,我们将数据格式写入表,如下所示

代码语言:javascript
复制
     score.table<-'score.table'

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-27 06:51:53

该更新没有发生,表示RMySQL包无法成功地将数据帧中的任何行映射到表中已有的记录。因此,这意味着您对dbWriteTable的调用有问题。我看到的两个潜在问题是,您没有为field.typesrow.names赋值。考虑打以下电话:

代码语言:javascript
复制
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,在这种情况下,包实际上会在更新期间发送额外的列。这可能会导致问题,例如,如果目标表有三列,而数据帧也有三列,那么您将尝试用四列进行更新。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47987429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档