Уникальный идентификатор, не распознаваемый SQL-кварри - PullRequest
1 голос
/ 11 июля 2019

Я делаю таблицу для пользователей, чтобы заполнить в Shiny, используя SQLite.В конце каждой сессии я хочу удалить все записи, содержащие уникальный идентификатор сессии:

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))

Iполучить следующую ошибку:

Warning: Error in result_create: no such column: ce20ca2792c26a702653ce54896fc10a

Если я заменю идентификатор сеанса случайным сгенерированным числом, например "4078540723057", записи будут удалены без проблем.Почему маркер сеанса $ не распознается?

1 Ответ

1 голос
/ 11 июля 2019

Поскольку столбец sessionId представляет собой текст в вашей базе данных SQLite, SQLite ожидает, что литеральное значение будет заключено в одинарные кавычки.Обычно для этого вы используете подготовленный оператор, но вы можете попробовать:

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

Отказ от необходимости использовать подготовленный оператор здесь может быть оправдан, так как ваш скрипт не открыт / недоступен извне.

...