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

R MYSQL Write table删除cceent列[关闭]

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

    我在MySQL中有下表,其中包含以下列

     tbl= ID(Integer(11)) Keyword(Varchar(55)) Estimate(DECIMAL(10,4)) 
           Error(DECIMAL(10,4))  CreateDate(DateTime)
    

    在这些变量中,ID和CreateDate是系统生成的,即在从R写入表时不需要生成相同的ID和CreateDate

    我正在将以下数据框写入此表

     DF<- Keyword   Estimate  Error
            a        23         2
            b        21         6
            c        20         5
    

    我使用以下代码使用DBWriteTable命令(R SQ lite包)编写此代码

      dbWriteTable(conn, value = DF, name='tbl', overwrite=T, append=F, 
      field.type=list(Keyword='varchar(100)', Estimated='DECIMAL(10,4)', 
      Error='Decimal(10,4)'),row.names=FALSE)
    

    现在,这会导致最后一个mysql表中的两列(即ID列和日期列)消失。

    我不知道为什么会这样。我还没有下命令删除专栏,我请求有人来看看并指导我。

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

    当你打电话的时候 dbWriteTable 具有 overwrite=TRUE 您告诉MySQL删除该表并重新创建一个新表。在您的例子中,它只使用它知道的三列(即您传递给它的内容)创建一个新表。一种选择是将其他两列添加到数据框中:

    DF$ID <- NA
    DF$CreateDate <- NA
    

    然后,拨打当前电话。我希望 NA 值将映射到 NULL 在MySQL中,这与执行 INSERT 并且不为这些列指定值。这里有一个潜在的问题,因为MySQL可能不知道这一点 ID 是自动递增列。所以我不太喜欢这个解决方案。

    根据您的想法,另一种选择是打以下电话:

    dbWriteTable(conn, value = DF, name='tbl', overwrite=FALSE, append=TRUE, 
        field.type=list(Keyword='varchar(100)', Estimated='DECIMAL(10,4)', 
        Error='Decimal(10,4)'),row.names=FALSE)
    

    现在,您可以直接附加到现有的表中。但是,您尚未指定非 空值 的值 身份证件 CreateDate 列。所以这个选项要求 创建时间 可为Null。如果 身份证件 是自动递增的,那么我希望MySQL能够使用此选项自动分配id。

    推荐文章