使用变量RMySQL进行查询

时间:2018-03-29 16:02:46

标签: mysql r

我尝试使用此脚本使用RMySQL选择表中的字段:

mydb <- dbConnect(MySQL(), dbname="***", user='***',host='***')
a<-29553
b<-31097
c<-'chr1'
s<-'+'
res<-dbSendQuery(mydb, "SELECT name FROM wgEncodeGencodeBasicV27 WHERE 
chrom=c AND strand=s AND txStart=a AND txEnd=b")

但它返回错误:“where子句'中的未知列'c'”。 为什么?我该如何更正脚本?

1 个答案:

答案 0 :(得分:0)

基本上,我们的想法是,您可以使用变量的帮助动态地准备query。这消除了将变量作为参数单独发送的需要。 sprintf很适合这个目的。

OP开始。方法应该是:

#Variables to be used in query
a<-29553
b<-31097
c<-'chr1'
s<-'+'

library(RMySQL)

mydb <- dbConnect(MySQL(), dbname="***", user='***',host='***')

#Prepare a query format string with place holders for variables. 
queryFormat <- "SELECT name FROM wgEncodeGencodeBasicV27 
WHERE chrom=`%s` AND strand=`%s` AND txStart=%d AND txEnd=%d"

#Use sprintf to prepare the query
query <- sprintf(queryFormat, c, s, a, b)

res<-dbSendQuery(mydb, query)

#The final query which has been send to Database:
#[1] "SELECT name FROM wgEncodeGencodeBasicV27 
# WHERE chrom=`chr1` AND strand=`+` AND txStart=29553 AND txEnd=31097"