我在Amazon SageMaker上的RStudio中有一个闪亮的应用程序。我将应用程序连接到Redshift上的两个数据库(一个带有客户地址,另一个带有客户ID)。
在我的ui
中,有一个条件面板,用户可以通过客户ID textInput(inputId ="cid")
或客户地址textInput(inputId ="cad")
进行搜索。根据选择的选项,用户还会获得一个actionButton
以提交ID 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= '**************')
在server
中,我想根据用户的选择查询地址或ID表。无论哪种方式,我都将查询结果保存在相应的数据框架中,以便在以后的计算中使用。
假设用户选择按地址搜索。我希望创建一个具有与输入地址匹配的地址的响应式数据框架。我下面的代码实现了这一点:
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
型
请注意,应用程序的结构是,红移连接在我的脚本之上,后面是ui
和server
。我试着把连接放在React环境中,但也不起作用。
我希望有人能帮我解决这个问题。谢啦,谢啦
1条答案
按热度按时间wgx48brx1#
我能够通过使用
pool
包来管理连接来解决这个问题。