requête RSQLite avec la variable spécifiée par l'utilisateur dans le champ WHERE [double]

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

  •  27-09-2019
  •  | 
  •  

Question

    

Cette question a déjà une réponse ici:

    
            
  •              dynamique « string » en R                                      2 réponses                          
  •     
    

J'utilise une bibliothèque de RSQLite dans R pour gérer un ensemble de données qui est trop grand pour RAM. Pour chaque régression j'interroger la base pour récupérer un exercice à la fois. Maintenant, j'ai codé en dur de l'exercice:

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

Je voudrais faire de l'exercice (2008 ci-dessus) pour effectuer des modifications un peu plus facile (et infaillible). Est-il possible que je peux passer une variable dans la chaîne de requête SQL? J'aimerais utiliser:

fiscal.year <- 2008
data.annual <- dbGetQuery(db, "SELECT * FROM annual WHERE fyear==fiscal.year")
Était-ce utile?

La solution

SQLite ne verra la chaîne transmise pour la requête, donc ce que vous faites est quelque chose comme

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

La bonne chose est que vous pouvez utiliser de la manière habituelle aux boucles déroulage. Oublier une seconde que vous avez des restrictions de RAM, vous pouvez le faire sur le plan conceptuel

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

et maintenant des données est une liste contenant tous vos ensembles de données annuelles. Ou vous pouvez conserver les données, exécutez votre régression et seulement stocker l'objet sommaire.

Autres conseils

La réponse de Dirk est sur place. Une petite chose que j'essaie de faire est de changer la mise en forme pour les tests faciles. Il semble que je dois couper et coller le texte SQL dans un éditeur de SQL à plusieurs reprises. Format donc je comme ceci:

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

Ce juste rend plus facile à couper et coller les bits de SQL dans / pour tester dans votre environnement de requête DB. Pas grand-chose avec une courte requête, mais peut être compliqué avec une plus longue chaîne SQL.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top