R:尽管'append = TRUE',但为什么dbWriteTable在表存在时失败

时间:2014-02-05 04:07:02

标签: mysql r

我正在尝试使用dbWriteTable方法将新数据附加到已存在的MySQL表中。我在过去使用过它没有问题,但它现在失败了因为表已经存在。这是尽管使用overwrite=FALSE, append=TRUE,

代码:

full_sum_table <- 'mydb.summary'    
dbWriteTable(conn=open_connection, name=full_sum_table, value=summary_data_final, overwrite=FALSE, append=TRUE, row.names=0)

Error in mysqlExecStatement(conn, statement, ...) : 
   RS-DBI driver: (could not run statement: Table 'summary' already exists)
[1] FALSE
Warning message:
In mysqlWriteTable(conn, name, value, ...) :
  could not create table: aborting mysqlWriteTable

此代码的第一次调用正常,但后续调用失败。

任何想法都将不胜感激。感谢

环境:

  R version 3.0.2
  Packages: DBI (I was using RMySQL but it is not available for 3.0.2)
  MySQL v5.6.14
  OS: Windows Server 7

2 个答案:

答案 0 :(得分:3)

作者在问题中列出了此解决方案,并已移至此处。

只有在使用完整的表格路径(例如myDB.temp_table与简单temp_table

相比时)才会出现错误/功能
> dbWriteTable(conn=open_connection, name='myDB.temp_table', value=summary_data_final, overwrite=FALSE, append=TRUE, row.names=0)
Error in mysqlExecStatement(conn, statement, ...) : 
  RS-DBI driver: (could not run statement: Table 'temp_table' already exists)
[1] FALSE
Warning message:
In mysqlWriteTable(conn, name, value, ...) :
  could not create table: aborting mysqlWriteTable

> dbWriteTable(conn=open_connection, name='temp_table', value=summary_data_final, overwrite=FALSE, append=TRUE, row.names=0)
[1] TRUE

我还没有在任何地方找到这个记录,并且我很惊讶我之前没有遇到它。

答案 1 :(得分:0)

只需使用此功能即可在表格中插入一行

 insert_row <- function(jconn,table_name,col_data,data){
  dbSendUpdate(jconn,paste0("INSERT INTO ",table_name," (",paste0(col_data,collapse=','),") VALUES ('",paste0(data,collapse="','"),"');"))
  print('data inserted')}