You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让glue::glue_sql返回仅含单引号的合法SQL查询字符串?

用glue::glue_sql生成含单引号的SQL查询字符串

我需要通过glue::glue_sql生成仅包含单引号的SQL查询字符串,尝试了两种方法都未得到预期结果:

方法1

con <- RAthena::dbConnect(RAthena::athena(),
                 s3_staging_dir = s3_staging_dir)

column_values <- c("thing1","thing2","thing3")

query1 <- glue::glue_sql("SELECT COUNT (*) as venues FROM schema.table WHERE column IN ({column_values*})", .con = con)
query1

返回结果:

'SELECT COUNT (*) as venues FROM schema.table WHERE column IN (\'thing1\', \'thing2\', \'thing3\')'

方法2

con <- RAthena::dbConnect(RAthena::athena(),
                 s3_staging_dir = s3_staging_dir)

column_values <- c("thing1","thing2","thing3")

query2 <- glue::glue_sql("SELECT COUNT (*) as venues FROM schema.table WHERE column IN ({`column_values`*})", .con = con)
query2

返回结果:

'SELECT COUNT (*) as venues FROM schema.table WHERE column IN ("thing1", "thing2", "thing3")'

期望输出:

"SELECT COUNT (*) as venues FROM schema.table WHERE column IN ('thing1', 'thing2', 'thing3')"

解决方法

方案1:移除数据库连接参数

如果不需要数据库连接的SQL语法适配,直接去掉.con参数,glue_sql默认会用单引号包裹字符串值,最后转换为字符类型即可得到无转义符的结果:

column_values <- c("thing1","thing2","thing3")

query <- glue::glue_sql("SELECT COUNT (*) as venues FROM schema.table WHERE column IN ({column_values*})")
as.character(query)

执行后输出:

[1] "SELECT COUNT (*) as venues FROM schema.table WHERE column IN ('thing1', 'thing2', 'thing3')"

方案2:手动指定单引号转义(保留数据库连接)

如果必须保留数据库连接,可以使用glue::sql_quote手动指定单引号作为包裹符,再拼接成查询语句:

con <- RAthena::dbConnect(RAthena::athena(), s3_staging_dir = s3_staging_dir)
column_values <- c("thing1","thing2","thing3")

# 为每个值添加单引号
quoted_values <- purrr::map_chr(column_values, ~ glue::sql_quote(., con = con, quote = "'"))
# 拼接成查询字符串
query <- glue::glue("SELECT COUNT (*) as venues FROM schema.table WHERE column IN ({glue::glue_collapse(quoted_values, sep = ', ')})")
as.character(query)

执行后同样会得到符合预期的带单引号的SQL字符串。


内容的提问来源于stack exchange,提问作者Douglas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:25:58