SQL quary无法识别唯一标识符

时间:2019-07-11 10:54:40

标签: r shiny rsqlite

我正在制作一张表格供用户使用SQLite填写Shiny。在每个会话结束时,我要删除所有包含唯一sessionID的条目:

library(RSQLite)
library(pool)
library(DBI)

#Generates unique token. For example "ce20ca2792c26a702653ce54896fc10a"
sessionID <- session$token 

pool <- dbPool(RSQLite::SQLite(), dbname = "db.sqlite")

df <- data.frame( sessionID=character(), 
                  name=character(),
                  group=character(),
                  stringsAsFactors = FALSE)

dbWriteTable(pool, "user_data", df, overwrite=FALSE, append=TRUE)

-------------#Code to fill out the table-----------------

在会话结束时,我使用以下命令删除特定于会话的条目:

dbExecute(pool, sprintf('DELETE FROM "user_data" WHERE "sessionID" == (%s)', sessionID))

我收到以下错误:

Warning: Error in result_create: no such column: ce20ca2792c26a702653ce54896fc10a

如果我将会话ID替换为随机生成的数字,例如“ 4078540723057”,则条目将被删除,没有任何问题。为什么无法识别session $ token?

1 个答案:

答案 0 :(得分:1)

由于sessionId列是SQLite数据库中的文本,因此SQLite希望文字值用单引号引起来。通常,您可以为此使用准备好的语句,但是您可以尝试:

dbExecute(pool, sprintf("DELETE FROM user_data WHERE sessionID = '%s'", sessionID))

因为您的脚本对外部不开放/不可访问,因此在此处无需使用准备好的语句可能是合理的。