R Shiny 将 TextInput 的内容放入 sql 查询中

Posted

技术标签:

【中文标题】R Shiny 将 TextInput 的内容放入 sql 查询中【英文标题】:R Shiny put content of a TextInput in sql queries 【发布时间】:2016-06-06 00:03:08 【问题描述】:

我遇到了 R shiny 和 sqlite 的问题。我的应用应该对用户进行身份验证并加载他/她的偏好。

这是我的代码:

server.R

library(shiny)
library(shinyBS)
library(dplyr)
library(lubridate)

library(DBI)
library(RSQLite)

############################
#    Database functions    #
###########################

# Connect the user to the dtabase app
connect <- function(userName,pwd)
    #Put a generic path here
  db <- dbConnect(SQLite(), dbname = "my_path/database.db")
  #Query to get the correct passwd
  qry = paste('SELECT password from USERS where name = "',userName,'"')
  res= dbGetQuery(db,qry )

  ifelse(res==pwd,"connected","unable to connect to the database")
  dbDisconnect(db)



function(input, output,session) 

  observeEvent(input$connectButton, 
   userName= renderPrint(input$username)
   print(userName)
   userPwd = paste(input$password)
       connect(user = userName,pwd = userPwd)

  )

ui.R

shinyUI(fluidPage(
titlePanel("Authentification"),
textInput('username', label="User name"),
textInput('password', label= "password"),
actionButton("connectButton", label='Connect'),
actionButton("subscribeButton",label='Subscribe')   
)
)

app.R

library(shiny)
library(shinyBS)
####### UI
ui <- source("ui.R")
####### Server
varserver <- source("server.R")
####### APP
shinyApp(ui = ui, server = varserver)

我的问题是当我想为查询放置 TextInput 的内容时。我尝试了几种方法

在当前版本中,renderPrint(input$username) 会返回一些似乎是函数但似乎没有用的东西。

我也尝试了另一种方式,只使用

userName=paste(input$userName)

这将返回 textField 的内容,但是当我将它集成到查询中时,它会放置

[1] "SELECT password from USERS where name = \" test \""

然后我得到了错误

Warning: Error in matrix: length of 'dimnames' [2] not equal to array extent

我的目标是进行这样的查询

"Select password FROM USERS where name = "username"

username代表TextInput的内容。

编辑

我知道使用这个版本的查询,它提出了一个语法正确的查询

qry = paste0('SELECT password from USERS where name = \'',userName,'\'')
res= dbGetQuery(db,qry )

但我现在面临这个问题:

Warning: Error in matrix: length of 'dimnames' [2] not equal to array extent

当我运行该方法时

connect(db,qry)

我认为问题出在我获取 TextInput 内容的方式上:我使用

function(input, output,session) 

  observeEvent(input$connectButton, 
   userName= paste0(input$username)
   userPwd = paste0(input$password)
       connect(user = userName,pwd = userPwd)

  )

您对此有何看法?

【问题讨论】:

尝试paste0() 而不是paste()。后者默认在术语之间插入空格。 【参考方案1】:

我找到了一个可行的解决方案

connect <- function(userName,pwd)
    #Put a generic path here
  db <- dbConnect(SQLite(), dbname = "my_path/database.db")
  #Query to get the correct passwd
  qry = paste0("SELECT password from USERS where name = \'",userName,"\'")
  res= dbGetQuery(db,qry )
  res = paste0(res)
  ifelse(res==pwd,print("connected"),print("unable to connect to the database"))
  dbDisconnect(db)

我只是在简单的引号之间添加参数

【讨论】:

以上是关于R Shiny 将 TextInput 的内容放入 sql 查询中的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法用 Shiny R 在 textInput 中放置超链接

在 R Shiny 中操作 textInput

r Shiny 使 textInput 以先前的 selectInput 为条件

R Shiny:在UI上的textInput中检查正则表达式

如何在 ui.R 中读取 TextInput,在 global.R 中使用此值处理查询并使用 Shiny 在 server.R 中显示

R Shiny:如何构建动态 UI(文本输入)