R MYSQL写表删除ccertain列

时间:2018-03-14 08:56:41

标签: mysql r rmysql rsqlite

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

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

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

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

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

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

  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)

现在这导致两个列,即ID和Date列在最终的mysql表中消失。

我不确定为什么会这样。我没有放置一个命令来删除列我要求别人看一看并指导我。

1 个答案:

答案 0 :(得分:2)

当您使用dbWriteTable呼叫overwrite=TRUE时,您告诉MySQL删除该表并重新创建一个新表。在您的情况下,它使用它知道的仅有的三个列创建一个新表,即您传递给它的内容。一种选择是将其他两列添加到数据框中:

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

然后,拨打当前电话。我希望NA值将映射到MySQL中的NULL,这与执行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)

现在您可以添加到现有表中。不过,您尚未为NULLID列指定非CreateDate值。因此,此选项要求CreateDate可以为空。如果ID是自动递增,那么我希望MySQL能够使用此选项自动分配id。