如何将这个Shiny数据表更改为SQL更新代码以用于PostgreSQL?

rryofs0p  于 2023-05-28  发布在  PostgreSQL
关注(0)|答案(1)|浏览(164)

我目前正在开发一个闪亮的应用程序,部分基于Niels货车der Velden的this教程。我遇到了以下代码块的问题:

observeEvent(input$submit_edit, priority = 20, {
SQL_df <- dbReadTable(pool, "responses_df")row_selection <- SQL_df[input$responses_table_row_last_clicked, "row_id"]dbExecute(pool, sprintf('UPDATE "responses_df" SET "name" = ?, "sex" = ?, "age" = ?,"comment" = ? WHERE "row_id" = ("%s")', row_selection),param = list(input$name,input$sex,input$age,input$comment))removeModal() 
})

该代码应该执行一个SQL查询,该查询更新数据库以反映对话框中所做的更改。当与RSQLite一起使用时,这段代码工作得很好。但是,当使用RPostgres时,我收到以下错误:

Warning: Error in : Failed to prepare query: ERROR:  syntax error at or near ","
LINE 1: UPDATE "responses_df" SET "name" = ?, "sex" = ?, "age" = ...
                                            ^

我试过更换?parameters与$ ones,希望这是一个简单的语法差异,但这会导致以下错误:

Warning: Error in : Failed to prepare query: ERROR:  syntax error at or near "$"
LINE 1: UPDATE "responses_df" SET "name" = $, "sex" = $, "age" = ...
                                           ^

**编辑:**为了保持一致性,修改了名称。

zz2j4svz

zz2j4svz1#

好吧,经过几个小时的反复试验,我终于意识到需要做出的调整:
1.将代码中的?更改为SEQUENTIAL $(等等)(“name”=?“性”=?变成“name”= $1和“sex”= $2
1.删除WHERE“row_id”中的双等号,只使用一个=。
1.将%s周围的双引号更改为单引号并删除括号。注意:您必须使用\转义符才能完成此操作。
我在下面包含了正确的代码:observeEvent(input$submit_edit,priority = 20,{

SQL_df <- dbReadTable(pool, "responses_df")

row_selection <- SQL_df[input$responses_table_row_last_clicked, "row_id"]

dbExecute(pool, sprintf('UPDATE "responses_df" SET "name" = $1, "sex" = $2, "age" = $3,"comment" = $4 WHERE "row_id" = \'%s\'', row_selection),
param = list(input$name,input$sex,input$age,input$comment))

removeModal() 
})

实际上,这只是语法不同的问题。似乎Postgres只是不同的足以惹恼我。这是有道理的,因为我一开始就不太喜欢SQL。尽管如此,我希望这对其他可能处理这个问题的人有所帮助。

相关问题