【问题标题】:Execute multiple SQL commands at once on R在 R 上一次执行多个 SQL 命令
【发布时间】:2018-06-17 14:53:42
【问题描述】:

我正在使用 RMySQL 和 DBI 来连接 R 和 MySQL

library(RMySQL)
library(DBI, quietly = TRUE)

一个命令一切正常,例如

sql = "select * from clients"
con <- dbConnect(MySQL(),user=user, password=password, dbname=dbname, host=host)
rs <- dbSendQuery(con, sql)
data <- fetch(rs, n=-1)
huh <- dbHasCompleted(rs)
dbClearResult(rs)
on.exit(dbDisconnect(con))

但是,当我想用​​“;”执行多个命令时在它们之间(例如设置一个参数),它返回错误。例如

sql = "SET @LAST_TEN_DAY = DATE_ADD(NOW(), INTERVAL -10 DAY); select * from clients where date > @LAST_TEN_DAY"
con <- dbConnect(MySQL(),user=user, password=password, dbname=dbname, host=host)
rs <- dbSendQuery(con, sql)
data <- fetch(rs, n=-1)
huh <- dbHasCompleted(rs)
dbClearResult(rs)
on.exit(dbDisconnect(con))

非常感谢,

【问题讨论】:

  • 你不能像这样使用 SQL 和 R。您必须创建一个变量来保存 DATE_ADD(NOW(), INTERVAL, -10 DAY) 的值,然后使用 SQL 查询 SELECT * FROM CLIENTS WHERE DATE&gt; your variable value
  • 嗨,Max,感谢您的回答。我可以知道如何在 R 中这样做吗?因为如果您执行 SQL 命令来创建变量,我不确定该变量是否会被保留以供下一次 SQL 命令执行。
  • 该变量将是全局变量,可用于 R 代码中的任何 sql 语句。
  • 复制dput(clients)的输出,给我一个可重现的数据集示例
  • 好的,请找一个采样数据如下结构(list(name = structure(c(3L, 1L, 4L, 2L), .Label = c("Anna", "Ciaran", "Hannah", "Roisin"), class = "factor"), date = structure(c(3L, 4L, 2L, 1L), .Label = c("2015-12-12 00:00:00", "2016-01-22 00:00:00", "2016-02-12 00:00:00", "2016-03-08 00:00:00"), class = "factor"), age = c(27, 28, 22, 19), job = structure(c(1L, 1L, 2L, 1L ), .Label = c("data analyst", "operator"), class = "factor")), .Names = c("name", "date", "age", "job"), row.names = c(NA, -4L), class = "data.frame")

标签: mysql sql r rmysql r-dbi


【解决方案1】:

对于多个命令,我们需要按如下方式工作。 dbSendQuery 将保存参数

sql = "select * from clients where date > @LAST_TEN_DAY"
con <- dbConnect(MySQL(),user=user, password=password, dbname=dbname, host=host)
dbSendQuery(con, 'SET @LAST_TEN_DAY = DATE_ADD(NOW(), INTERVAL -10 DAY)')
rs <- dbSendQuery(con, sql)
data <- fetch(rs, n=-1)
huh <- dbHasCompleted(rs)
dbClearResult(rs)
on.exit(dbDisconnect(con))

【讨论】:

    猜你喜欢
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2017-05-01
    • 2012-08-31
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多