从R中删除sqlite DB表中的行

从R中删除sqlite DB表中的行,r,shiny,dt,rsqlite,R,Shiny,Dt,Rsqlite,我正在构建一个闪亮的应用程序,它允许用户对sqlite3数据库中的表执行CRUD操作。我使用DT中的input$table\u rows\u selected函数来获取用户选择的行的索引。然后,我尝试使用操作按钮deleteRows从数据库中删除这些行,这些行具有与存储为主键的历元时间相匹配的时间戳。以下代码运行时没有任何错误,但不会删除所选行 observeEvent(input$deleteRows, { if(!is.null(input$responsesTable_rows_se

我正在构建一个闪亮的应用程序,它允许用户对sqlite3数据库中的表执行CRUD操作。我使用DT中的input$table\u rows\u selected函数来获取用户选择的行的索引。然后,我尝试使用操作按钮deleteRows从数据库中删除这些行,这些行具有与存储为主键的历元时间相匹配的时间戳。以下代码运行时没有任何错误,但不会删除所选行

observeEvent(input$deleteRows, {

  if(!is.null(input$responsesTable_rows_selected)){
    s=input$responsesTable_rows_selected

    conn <- poolCheckout(pool)

    lapply(length(s), function(i){
      timestamp = rvsTL$data[s[i],8]

      query <- glue::glue_sql("DELETE FROM TonnageListChartering
                          WHERE TonnageListChartering.timestamp = {timestamp}
                          ", .con = conn)

      dbExecute(conn, sqlInterpolate(ANSI(), query))
    })

    poolReturn(conn)
    # Show a modal when the button is pressed
    shinyalert("Success!", "The selected rows have been deleted. Refresh
             the table by pressing F5", type = "success")
  }

})

为什么这不起作用?如果是这样的话,有没有办法在不重新加载应用程序的情况下刷新datatable输出?

正如@RomanLustrik所指出的,时间戳确实有点“古怪”。我不太熟悉sqlite,但运行PRAGMA table_infotonageListChartering;他透露:

0|vesselName||0||0
1|empStatus||0||0
2|openPort||0||0
3|openDate||0||0
4|source||0||0
5|comments||0||0
6|updatedBy||0||0
7|timestamp||0||1
8|VesselDetails||0||0
9|Name||0||0
10|VslType||0||0
11|Cubic||0||0
12|DWT||0||0
13|IceClass||0||0
14|IMO||0||0
15|Built||0||0
16|Owner||0||0
我想没有一个变量定义了数据类型,我不确定现在是否可以这样做。无论如何,我更改了查询以确保时间戳在引号中

query <- glue::glue_sql("DELETE FROM TonnageListChartering
                          WHERE TonnageListChartering.timestamp = '{timestamp}'
                          ", .con = conn)
这将删除用户选择的行

observeEvent(input$deleteRows, {

  if(!is.null(input$responsesTable_rows_selected)){
    s=input$responsesTable_rows_selected

    conn <- poolCheckout(pool)

    lapply(length(s), function(i){
      timestamp = rvsTL$data[s[i],8]

      query <- glue::glue_sql("DELETE FROM TonnageListChartering
                          WHERE TonnageListChartering.timestamp = {timestamp}
                          ", .con = conn)

      dbExecute(conn, sqlInterpolate(ANSI(), query))
    })

    poolReturn(conn)
    # Show a modal when the button is pressed
    shinyalert("Success!", "The selected rows have been deleted. Refresh
             the table by pressing F5", type = "success")
  }

})

但是,当我只剩下一行时,我无法删除它。不知道为什么。可能是因为我在创建表时定义了一个主键?

您是否尝试打印查询以查看它是否与您要删除的内容匹配?“我猜时间戳有点怪怪的。”罗曼鲁什特里克:我查过了。看起来很好。这是当我单击从TonageListChartering删除的特定行时查询生成的,其中TonageListChartering.timestamp=1534569538