rmysql:as.character.default()中出错:

kiayqfof  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(520)

我尝试在r中使用以下函数:

  1. heritblup <- function(name) {
  2. library(RMySQL)
  3. library(DBI)
  4. con <- dbConnect(RMySQL::MySQL(),
  5. dbname ="mydab",
  6. host = "localhost",
  7. port = 3306,
  8. user = "root",
  9. password = "")
  10. value1 <- 23;
  11. rss<- paste0 ("INSERT INTO namestable
  12. (myvalue, person)
  13. VALUES ('$value1', '",name,"')")
  14. rs <<- dbGetQuery (con, rss)
  15. }
  16. heritblup("Tommy")

但我一直有个错误:
as.character.default()中出错:没有方法将此s4类强制为从调用的向量:as.character.default()
我尝试将粘贴函数改为:rss<-paste0(“insert into namestable(myvalue,person)values($value1,“,name,”)”
错误仍然存在;我不知道怎么了。请帮忙

i34xakig

i34xakig1#

代码中有几个问题。我不确定op是否试图 insert 数据库中的记录或从数据库中提取。
假设,基于查询,他希望在数据库表中插入数据。
规则是查询应该在 R 它在mysql中的执行方式。价值置换(如有)应在 R 因为mysql引擎不知道 R .
因此,查询准备步骤应如下所示:

  1. rss <- sprintf("INSERT INTO namestable (myvalue, person) VALUES (%d, '%s')", value1, name)
  2. # "INSERT INTO namestable (myvalue, person) VALUES (23, 'test')"

如果数据插入是目标,那么 dbGetQuery 而不是根据r文档的正确选项 dbSendStatement() 应用于数据操作。来自帮助的参考建议:
但是,强烈建议调用者对数据操作语句使用dbsendstatement()。
基于该查询,执行行应为:

  1. rs <- dbSendStatement(con, rss)
  2. ret_val <- dbGetRowsAffected(rs)
  3. dbClearResult(rs)
  4. dbDisconnect(con)
  5. return(ret_val)
展开查看全部

相关问题