0
データベースで動的な挿入ステートメントを使用しようとしていますが、文字列では失敗します。以下のコードを参照してください。dbSendQueryテキスト付きのINSERTステートメント
library(dplyr)
library(DBI)
library(pool)
library(RSQLite)
df1 <- data.frame(stringsAsFactors = F, id = 1:4, value = letters[1:4])
df2 <- data.frame(stringsAsFactors = F, id = 1:4, value = 100:103)
con <- dbPool(SQLite(), dbname = "test") %>% poolCheckout()
dbWriteTable(con, "with_text", df1, overwrite = T)
dbWriteTable(con, "no_text", df2, overwrite = T)
db1 <- dbReadTable(con, "with_text")
db2 <- dbReadTable(con, "no_text")
new1 <- db1[1,]
new2 <- db2[1,]
query1 <- sprintf(
"INSERT INTO %s (%s) VALUES (%s);",
"with_text",
paste(names(new1), collapse = ", "),
paste(new1, collapse = ", ")
)
query2 <- sprintf(
"INSERT INTO %s (%s) VALUES (%s);",
"no_text",
paste(names(new2), collapse = ", "),
paste(new2, collapse = ", ")
)
db_query1 <- dbSendStatement(con, query1)#fails
dbClearResult(db_query1)
dbReadTable(con, "with_text")
db_query2 <- dbSendStatement(con, query2)
dbClearResult(db_query2)
dbReadTable(con, "no_text")
#failsラインは、このエラーを生成します。Query1をの
Error in rsqlite_send_query([email protected], statement) : no such column: a
値は次のとおりです。
[1] "INSERT INTO with_text (id, value) VALUES (1, a);"
私は問題が周りの単一引用符( ')の欠如であると認識テキスト値ですが、回避策が必要です。どんな助けもありがとうございます。私は列の型を追加しようとしましたが、動作させることができませんでした。
'query1'の値を –
@ W.Murphyに追加できますか?それは、テキストフィールドを使用する点を除いてquery2と同じです。私は問題がテキスト値の回りに一重引用符( ')がないことを認識していますが、そのための回避策が必要です。 > query1 [1] "INSERT INTO with_text(id、value)VALUES(1、a);" – Spencer