RSQLite dbGetQuery如何使用数据框参数批量执行SQL LIKE查询
问题根因
- 构造SQL语句时额外多包裹了一层外层单引号,导致传入的SQL格式异常,触发字符串解析错误
- 模糊匹配需要的
%通配符没有添加到关键词两侧,即使语法修复也无法命中包含目标关键词的记录
解决方案
快速修复单条查询
修正拼接逻辑,去掉多余引号、补充通配符即可正常执行:
keyword <- df[1,1] # 通配符直接拼在关键词两侧,无需额外加外层单引号 sqlcomp <- paste0("SELECT name, registered_address FROM company WHERE LOWER(name) LIKE LOWER('%", keyword, "%')") dbGetQuery(db, sqlcomp)
批量查询所有企业名
用循环遍历所有关键词查询后合并结果即可:
library(dplyr) # 遍历数据框内所有企业名查询 result_list <- lapply(df[[1]], function(keyword) { sql <- paste0("SELECT name, registered_address FROM company WHERE LOWER(name) LIKE LOWER('%", keyword, "%')") return(dbGetQuery(db, sql)) }) # 合并所有查询结果 final_result <- bind_rows(result_list)
安全优化方案(推荐)
使用参数化查询避免SQL注入风险,无需自行处理引号转义:
# 预定义带参数占位符的SQL语句 template_sql <- "SELECT name, registered_address FROM company WHERE LOWER(name) LIKE LOWER(?)" # 批量执行参数化查询 result_list <- lapply(df[[1]], function(keyword) { # 通配符添加到参数值中 query_param <- paste0("%", keyword, "%") return(dbGetQuery(db, template_sql, params = list(query_param))) }) final_result <- bind_rows(result_list)
内容的提问来源于stack exchange,提问作者Valentin Franke
相关产品推荐
相关产品推荐

