代码之家  ›  专栏  ›  技术社区  ›  Raghavan vmvs

RMYSQL Writetable错误

  •  1
  • Raghavan vmvs  · 技术社区  · 8 年前

    我有以下R数据帧

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

    我有一个mysql表,如下所示。(评分表)

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

    我已经编写了我的数据框架来评分。使用此代码的表

        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包,然后重新运行,结果是一样的。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Tim Biegeleisen    8 年前

    更新未发生表示 RMySQL 包无法将数据框中的任何行成功映射到表中已有的记录。这意味着 dbWriteTable 有问题。我看到的两个潜在问题是您没有为 field.types 或 row.names . 考虑拨打以下电话:

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

    如果省略 领域类型 ,则包将尝试推断类型。我不是这个包的专家,所以我不知道这个推断有多健壮,但很可能您希望为复杂的更新查询指定显式类型。

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