1

我在 mysql 数据库中创建了一个空表,具有以下规范

    Field          Type Null Key           Default                       Extra
1      Id       int(11)   NO PRI              <NA>              auto_increment
2    Date     timestamp   NO     CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
3 Country   varchar(45)  YES                  <NA>                            
4   Brand   varchar(45)  YES                  <NA>                            
5   Value decimal(10,0)  YES                  <NA>                          

现在我想使用 RODBC 包中的 sqlSave 将数据框中的数据附加到该表中。我的数据框看起来像这样

     Id       Date Country  Brand Value
591 591 2013-06-22      DK bet365    44
603 603 2013-09-14      DK bet365    69
362 362 2009-01-31      DK bet365    22
296 296 2013-08-31      DK unibet    33
216 216 2012-02-18      DK unibet    24
261 261 2012-12-29      DK unibet    28
326 326 2008-05-24      DK bet365    18
521 521 2012-02-18      DK bet365    71
494 494 2011-08-13      DK bet365    44
558 558 2012-11-03      DK bet365    68

并且可以通过

mydf<-structure(list(Id = c(591L, 603L, 362L, 296L, 216L, 261L, 326L, 521L, 494L, 558L), 
                 Date = c("2013-06-22", "2013-09-14", "2009-01-31", "2013-08-31", "2012-02-18", "2012-12-29", "2008-05-24", "2012-02-18", "2011-08-13", "2012-11-03"), Country = c("DK", "DK", "DK", "DK", "DK", "DK", "DK", "DK", "DK", "DK"), 
                 Brand = structure(c(2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), 
                                   .Label = c("unibet", "bet365", "betsafe"), 
                                   class = "factor"), 
                 Value = c(44, 69, 22, 33, 24, 28, 18, 71, 44, 68)), 
            .Names = c("Id", "Date", "Country", "Brand", "Value"), 
            row.names = c(591L, 603L, 362L, 296L, 216L, 261L, 326L, 521L, 494L, 558L), 
            class = "data.frame")

然后我运行以下命令

sqlSave(channel, dat=mydf, tablename="GoogleTrends", rownames=FALSE, append=TRUE)

这会导致错误:

Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test,  : 
  missing columns in »data«

我试过添加 varTypes 但仍然没有运气。我也尝试过使用 sqlUpdate 但也无法使其正常工作。需要明确的是,如果我允许 sqlSave 自己创建表,我可以轻松完成这项工作。所以我想有一些转换问题,但我无法检测到它。任何人都知道如何解决这个问题?

4

3 回答 3

0

我在使用 MySQL ODBC 驱动程序 5.2 版的 Windows 系统上遇到了同样的问题。odbcConnect 中的 case="nochange" 参数起到了作用。如果没有此参数,sqlSave 会将数据框中的列名小写。

于 2014-06-23T18:44:41.293 回答
0

请问你是如何定义varTypes的?我认为使用 varTypes 会起作用。我要做的是从已经创建的表中检索变量类型,并让 R 映射到它。在 R 中,您可以使用 tmp <- sqlColumns(channel, tablename) 之类的方法获取已创建的表的 vartype,而您想要的是 varspec <- tmp$TYPE_NAME。

于 2014-01-15T01:35:09.717 回答
0

我遇到了一个非常相似的问题,并从这里发现 Problems with RODBC sqlSave that turn fast=F 解决了这个问题。

于 2017-06-06T17:43:54.800 回答