我正在制作一张表格供用户使用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?
答案 0 :(得分:1)
由于sessionId
列是SQLite数据库中的文本,因此SQLite希望文字值用单引号引起来。通常,您可以为此使用准备好的语句,但是您可以尝试:
dbExecute(pool, sprintf("DELETE FROM user_data WHERE sessionID = '%s'", sessionID))
因为您的脚本对外部不开放/不可访问,因此在此处无需使用准备好的语句可能是合理的。