DBI语句正在进行错误,在一个闪亮的React式环境中

anhgbhbe  于 2023-07-31  发布在  React
关注(0)|答案(1)|浏览(96)

我在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


请注意,应用程序的结构是,红移连接在我的脚本之上,后面是uiserver。我试着把连接放在React环境中,但也不起作用。
我希望有人能帮我解决这个问题。谢啦,谢啦

wgx48brx

wgx48brx1#

我能够通过使用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)
    })

相关问题