循环SQL SELECT,从R中的数据帧更改参数

循环SQL SELECT,从R中的数据帧更改参数,sql,r,dataframe,Sql,R,Dataframe,我想知道是否有可能在R中构建一个sqlselect查询,该查询将在循环的每次运行时更改WHERE参数,并从一个单独的R数据帧中获取它们 I参数dataframe[df_params]如下所示: group person date_from date_to 1 Mike 2020-10-01 12:00:00 2020-10-01 13:00:00 2 Mike 2020-10-04 09:00:00 2020-10-

我想知道是否有可能在R中构建一个sqlselect查询,该查询将在循环的每次运行时更改WHERE参数,并从一个单独的R数据帧中获取它们

I参数dataframe[df_params]如下所示:

group   person   date_from             date_to
1        Mike    2020-10-01 12:00:00   2020-10-01 13:00:00
2        Mike    2020-10-04 09:00:00   2020-10-07 17:00:00
3        Dave    2020-10-07 12:00:00   2020-10-07 13:00:00
4        Dave    2020-10-09 09:00:00   2020-10-11 17:00:00
dflist_new<-list()
suppressWarnings({
for (group in df_params) {
  suppressWarnings({
  rs = dbSendQuery(connect_replica(), paste("
                                SELECT *
                                FROM classroom_table 
                                WHERE person = ",person," AND timestamp >= ",date_from," AND timestamp <= ",date_to,"
                                
                               ", sep=''))
                  })
  df_groups<- fetch(rs, n=-1)
  if ((is.data.frame(df_groups) && nrow(df_groups)==0) ==TRUE){
    next
  }
  dflist_new[[group]] <- df_groups
  disconnect_replica()
}})

我的想法是这样的:

group   person   date_from             date_to
1        Mike    2020-10-01 12:00:00   2020-10-01 13:00:00
2        Mike    2020-10-04 09:00:00   2020-10-07 17:00:00
3        Dave    2020-10-07 12:00:00   2020-10-07 13:00:00
4        Dave    2020-10-09 09:00:00   2020-10-11 17:00:00
dflist_new<-list()
suppressWarnings({
for (group in df_params) {
  suppressWarnings({
  rs = dbSendQuery(connect_replica(), paste("
                                SELECT *
                                FROM classroom_table 
                                WHERE person = ",person," AND timestamp >= ",date_from," AND timestamp <= ",date_to,"
                                
                               ", sep=''))
                  })
  df_groups<- fetch(rs, n=-1)
  if ((is.data.frame(df_groups) && nrow(df_groups)==0) ==TRUE){
    next
  }
  dflist_new[[group]] <- df_groups
  disconnect_replica()
}})


<代码> DFListyNeX

有几种方法,但首先:您可能需要考虑参数化查询,人工构建查询字符串。虽然存在关于恶意的安全问题(例如,XKCD的又名“Little Bobby Tables”),但也存在格式错误字符串或Unicode与ANSI错误的问题,即使是单个数据分析师运行查询也是如此

首先,使用
DBI::dbBind

qry