RMYSQL写表删除某些列[关闭]

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

我在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包)编写此代码

  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表中消失。

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

mysql r rmysql rsqlite
1个回答
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。

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