提问人:user49017 提问时间:7/4/2023 最后编辑:jpsmithuser49017 更新时间:7/16/2023 访问量:56
DBI 语句进行错误,在闪亮的反应式环境中
DBI statement in progress error, in a Shiny Reactive Environment
问:
我在 Amazon SageMaker 上的 RStudio 中有一个闪亮的应用程序。我将应用程序连接到 Redshift 上的两个数据库(一个包含客户地址,另一个包含客户 ID)。
在我的 中,有一个条件面板,用户可以在其中按客户 ID 或客户地址进行搜索。根据所选的选项,用户还会获得提交 ID 或地址,并将查询发送到相应的表。ui
textInput(inputId ="cid")
textInput(inputId ="cad")
actionButton
actionButton("go_cid")
actionButton("go_cad")
我的连接有效,如下所示:
con_cad <- dbConnect(odbc::odbc(),
Driver='redshift',
Server='***********.redshift.amazonaws.com',
Port='5439',
Database='*******',
UID='****************',
PWD= '**************')
con_cid <- dbConnect(odbc::odbc(),
Driver='redshift',
Server='***********.redshift.amazonaws.com',
Port='5439',
Database='*******',
UID='****************',
PWD= '**************')
在“我想查询地址”或“ID”表中,具体取决于用户选择。无论哪种方式,我都会将查询结果保存在相应的数据帧中,以便在以后的计算中使用。server
假设用户选择按地址搜索。我希望创建一个具有与输入地址匹配的地址的反应式数据帧。我的代码下面的代码实现了这一点:
df_cad <- eventReactive(input$go_cad,{
qry_cad <- dbSendQuery(con_cad, paste0("SELECT * FROM customer_ad WHERE address = '" , toupper(input$cad) , "'"))
cad_result <- dbFetch(qry_cad , n =3)
onStop(function(){dbClearResult(qry_cad) })
cad_result
})
当我第一次在应用程序中搜索地址时,一切正常。但是,当应用程序运行时,当我搜索第二个地址(或第二次搜索同一地址)时,出现以下错误。
Error: nanodbc/nanodbc.cpp:1509: 00000: [RStudio][Amazon Redshift] (140) Error occurred while trying to run statement: a statement is already in progress
请注意,该应用程序的结构使得 redshift 连接位于我的脚本之上,后跟 和 .我试图将连接放在反应式环境中,但这也没有用。ui
server
如果有人能帮我解决这个问题,我会很高兴。 谢谢
答:
0赞
user49017
7/16/2023
#1
我能够通过使用软件包来管理连接来解决这个问题。pool
pool_cad <- pool::dbPool(drv = odbc::odbc(),
Driver='redshift',
Database= '******',
Port='5439',
Server = '*******.redshift.amazonaws.com',
UID = '*******',
PWD = '*******')
df_cad <- eventReactive(input$go_cad,{
qry_cad <- "SELECT * FROM FROM customer_ad WHERE address =?addr;"
sql_cad_statement <- sqlInterpolate(pool_cad, qry_cad, addr = toupper(input$cad) )
dbGetQuery(pool_cad, sql_cad_statement)
})
评论