R MYSQL Write table 删除某些列

R MYSQL Write table deletes ccertain columns

我在 MySQL 中有以下 table 和以下列

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

这些变量 ID 和 CreateDate 是系统生成的,即我在从 R

写入 table 时不需要生成相同的变量

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

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

我不确定为什么会这样。我还没有下命令删除专栏我请求有人看一下并指导我。

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

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)

现在您可以只附加到已经存在的 table。尽管如此,您还没有为 IDCreateDate 列指定非 NULL 值。所以这个选项要求 CreateDate 可以为空。如果 ID 是自动递增,那么我希望 MySQL 能够使用此选项自动分配一个 id。