您可以在一個非常簡單的方式將其參數化(並且你可以用下面的功能整合到一個功能,使用更簡便):
dat <- mtcars
inserts <- sprintf("INSERT INTO `%s` (%s) VALUES (%s);",
"results",
paste(sprintf("`%s`", colnames(dat)), collapse=", "),
sapply(1:nrow(dat), function(i) {
paste(sprintf("`%s`", unlist(dat[i,], use.names=FALSE)) , collapse=", ")
}))
head(inserts)
## [1] "INSERT INTO `results` (`mpg`, `cyl`, `disp`, `hp`, `drat`, `wt`, `qsec`, `vs`, `am`, `gear`, `carb`) VALUES (`21`, `6`, `160`, `110`, `3.9`, `2.62`, `16.46`, `0`, `1`, `4`, `4`);"
## [2] "INSERT INTO `results` (`mpg`, `cyl`, `disp`, `hp`, `drat`, `wt`, `qsec`, `vs`, `am`, `gear`, `carb`) VALUES (`21`, `6`, `160`, `110`, `3.9`, `2.875`, `17.02`, `0`, `1`, `4`, `4`);"
## [3] "INSERT INTO `results` (`mpg`, `cyl`, `disp`, `hp`, `drat`, `wt`, `qsec`, `vs`, `am`, `gear`, `carb`) VALUES (`22.8`, `4`, `108`, `93`, `3.85`, `2.32`, `18.61`, `1`, `1`, `4`, `1`);"
## [4] "INSERT INTO `results` (`mpg`, `cyl`, `disp`, `hp`, `drat`, `wt`, `qsec`, `vs`, `am`, `gear`, `carb`) VALUES (`21.4`, `6`, `258`, `110`, `3.08`, `3.215`, `19.44`, `1`, `0`, `3`, `1`);"
## [5] "INSERT INTO `results` (`mpg`, `cyl`, `disp`, `hp`, `drat`, `wt`, `qsec`, `vs`, `am`, `gear`, `carb`) VALUES (`18.7`, `8`, `360`, `175`, `3.15`, `3.44`, `17.02`, `0`, `0`, `3`, `2`);"
## [6] "INSERT INTO `results` (`mpg`, `cyl`, `disp`, `hp`, `drat`, `wt`, `qsec`, `vs`, `am`, `gear`, `carb`) VALUES (`18.1`, `6`, `225`, `105`, `2.76`, `3.46`, `20.22`, `1`, `0`, `3`, `1`);"
dat <- iris
inserts <- sprintf("INSERT INTO `%s` (%s) VALUES (%s);",
"results",
paste(sprintf("`%s`", colnames(dat)), collapse=", "),
sapply(1:nrow(dat), function(i) {
paste(sprintf("`%s`", unlist(dat[i,], use.names=FALSE)) , collapse=", ")
}))
head(inserts)
## [1] "INSERT INTO `results` (`Sepal.Length`, `Sepal.Width`, `Petal.Length`, `Petal.Width`, `Species`) VALUES (`5.1`, `3.5`, `1.4`, `0.2`, `1`);"
## [2] "INSERT INTO `results` (`Sepal.Length`, `Sepal.Width`, `Petal.Length`, `Petal.Width`, `Species`) VALUES (`4.9`, `3`, `1.4`, `0.2`, `1`);"
## [3] "INSERT INTO `results` (`Sepal.Length`, `Sepal.Width`, `Petal.Length`, `Petal.Width`, `Species`) VALUES (`4.7`, `3.2`, `1.3`, `0.2`, `1`);"
## [4] "INSERT INTO `results` (`Sepal.Length`, `Sepal.Width`, `Petal.Length`, `Petal.Width`, `Species`) VALUES (`4.6`, `3.1`, `1.5`, `0.2`, `1`);"
## [5] "INSERT INTO `results` (`Sepal.Length`, `Sepal.Width`, `Petal.Length`, `Petal.Width`, `Species`) VALUES (`5`, `3.6`, `1.4`, `0.2`, `1`);"
## [6] "INSERT INTO `results` (`Sepal.Length`, `Sepal.Width`, `Petal.Length`, `Petal.Width`, `Species`) VALUES (`5.4`, `3.9`, `1.7`, `0.4`, `1`);"
set.seed(1492)
dat <- data.frame(b1=sample(10, 10),
b2=sample(10, 10),
b3=sample(10, 10),
b4=sample(10, 10))
inserts <- sprintf("INSERT INTO `%s` (%s) VALUES (%s);",
"results",
paste(sprintf("`%s`", colnames(dat)), collapse=", "),
sapply(1:nrow(dat), function(i) {
paste(sprintf("`%s`", unlist(dat[i,], use.names=FALSE)) , collapse=", ")
}))
head(inserts)
## [1] "INSERT INTO `results` (`b1`, `b2`, `b3`, `b4`) VALUES (`3`, `7`, `7`, `2`);"
## [2] "INSERT INTO `results` (`b1`, `b2`, `b3`, `b4`) VALUES (`2`, `6`, `4`, `9`);"
## [3] "INSERT INTO `results` (`b1`, `b2`, `b3`, `b4`) VALUES (`9`, `2`, `2`, `7`);"
## [4] "INSERT INTO `results` (`b1`, `b2`, `b3`, `b4`) VALUES (`1`, `4`, `5`, `10`);"
## [5] "INSERT INTO `results` (`b1`, `b2`, `b3`, `b4`) VALUES (`7`, `10`, `1`, `6`);"
## [6] "INSERT INTO `results` (`b1`, `b2`, `b3`, `b4`) VALUES (`6`, `9`, `10`, `4`);"
但是,如果我們更瞭解您真正想要解決的問題,可能會有更多最佳方式將這些數據放回到數據庫中。
如果dat不包含列,則返回的值將爲NULL。例如dat $ b2和dat $ b3將返回NULL,這可以用來代替NA嗎? –
是NULL完全正常。 – costebk08
然後您的查詢應適用於所有情況。你沒試過嗎? –