SQL 查询无法识别的唯一标识符

Unique identifier not recognized by SQL query

我正在制作一个 table 供用户使用 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?

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

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

在此处放弃使用准备语句的需要可能是合理的,因为您的脚本未 open/accessible 到外部。