Dies sind die Optionen, die ich von der Verwendung von RODBC kenne. Ich weiß , dass RSQLite native Parameterbindung unterstützt, aber das ist normalerweise keine Option für die meisten Menschen.
# Note that sprintf doesn't quote character values. The quotes need
# to be already in the sql, or you have to add them yourself to the
# parameter using paste().
q <- "select * from table where val1 = '%s' and val2 < %d and val3 >= %f"
sprintf(q,"Hey!",10,3.141)
# The gsub route means you can't easily use a single placeholder
# value.
q <- "select * from table where val1 = '?' and val2 < ? and val3 >= ?"
gsub("?","Value!",q,fixed = TRUE)
beschäftige ich mich mit vielen Konserven Anfragen für meine Arbeit, die verschiedenen Parameter erfordern. Da in meinem Fall habe ich nur SELECT
Privilegien, und ich bin die einzige Person, die meinen Code läuft, muss ich nicht wirklich über die Validierung kümmern.
Also ich bin im Grunde die gsub
Route gegangen, um in der Lage zu sein, alle meine Abfragen in separaten .SQL-Dateien zu speichern. Das liegt daran, dass die Abfragen oft lang genug sind, um sie in meinen .R-Dateien zu speichern. Indem ich sie getrennt aufbewahre, erleichtert es mir , sie mit Formatierung und Hervorhebung zu bearbeiten und zu pflegen, dass mehr SQL-geeignet ist.
Also habe ich einige kleine Funktionen geschrieben, die eine Abfrage aus einer .SQL-Datei lesen und alle Parameter binden. Ich schreibe die Abfrage mit Parametern, die mit Doppelpunkten bezeichnet sind, , d. H. :param1:
, :param2:
.
Dann verwende ich diese Funktion, um die SQL-Datei zu lesen:
function (path, args = NULL)
{
stopifnot(file.exists(path))
if (length(args) > 0) {
stopifnot(all(names(args) != ""))
sql <- readChar(path, nchar = file.info(path)$size)
p <- paste0(":", names(args), ":")
sql <- gsub_all(pattern = p, replacement = args, x = sql)
return(sql)
} else {
sql <- readChar(path, nchar = file.info(path)$size)
return(sql)
}
}
wo gsub_all
grundsätzlich für eine nur ein Wrapper für Schleife ist über die Parameter und args
ist eine benannte Liste von Parameterwerten.
Das ist die Palette der Möglichkeiten, die mir bekannt sind.
Nicht, dass ich wüsste. 'sprintf' ist die einzige andere Option, die ich kenne, aber das macht auch keine Bereinigung. – joran
Es scheint [hier] (http://stackoverflow.com/a/1645086/142019) als "Platzhalter" erwähnt zu werden, aber ich konnte immer noch nicht finden, wie man sie benutzt. –
Würde das Reinigen der Saite vor dem Einfügen nicht dasselbe bewirken? –