Consulta rsqlite com variável especificada pelo usuário no campo [duplicado

StackOverflow https://stackoverflow.com/questions/3449666

  •  27-09-2019
  •  | 
  •  

Pergunta

Esta pergunta já tem uma resposta aqui:

Estou usando um RSQLite Biblioteca em r in para gerenciar um conjunto de dados muito grande para RAM. Para cada regressão, consultei o banco de dados para recuperar um ano fiscal por vez. Agora eu tenho o ano fiscal codificado:

data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==2008")

Eu gostaria de tornar o ano fiscal (2008 acima) para facilitar um pouco as alterações (e à prova de idiotas). Existe uma maneira de passar uma variável na string de consulta SQL? Eu adoraria usar:

fiscal.year <- 2008
data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==fiscal.year")
Foi útil?

Solução

Sqlite só verá a corda passada para a consulta, então o que você faz é algo como

  sqlcmd <- paste("SELECT * FROM annual WHERE fiscal=", fiscal.year, sep="")
  data.annual <- dbGetQuery(db, sqlcmd)

O bom é que você pode usar isso a maneira usual de desenrolar os loops. Esquecendo por um segundo que você tem restrições de RAM, conceitualmente você pode fazer

  years <- seq(2000,2010)
  data <- lapply(years, function(y) {
     dbGetQuery(db, paste("SELECT * FROM annual WHERE fiscal=", y, sep="")
  }

E agora os dados são uma lista que contém todos os seus conjuntos de dados anuais. Ou você pode manter os dados, executar sua regressão e armazenar apenas o objeto de resumo.

Outras dicas

A resposta de Dirk está no local. Uma coisinha que tento fazer é mudar a formatação para facilitar o teste. Parece que tenho que cortar e colar o texto SQL em um editor SQL muitas vezes. Então eu formato assim:

sqlcmd <- paste("
   SELECT * 
   FROM annual 
   WHERE fiscal=
 ", fiscal.year, sep="")
data.annual <- dbGetQuery(db, sqlcmd)

Isso apenas facilita o corte e a cola dos bits SQL para testar em seu ambiente de consulta de banco de dados. Não há grande coisa com uma consulta curta, mas pode ficar pesado com uma string SQL mais longa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top