【问题标题】:Deleting row in table in sqlite DB from R从R中删除sqlite DB中表中的行
【发布时间】:2018-08-18 07:49:44
【问题描述】:

我正在构建一个闪亮的应用程序,它将允许用户对存在于 sqlite3 数据库中的表进行 CRUD 操作。我正在使用DT 中的input$table_rows_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")
  }

})

pool 是一个全局级别的处理程序,用于连接到数据库。

pool <- pool::dbPool(drv = RSQLite::SQLite(),
                     dbname="data/compfleet.db")

为什么这不起作用?如果是这样,是否有任何方法可以刷新数据表输出而无需重新加载应用程序?

【问题讨论】:

  • 您是否尝试过打印查询以查看它是否真的与您要删除的内容匹配?我的猜测是时间戳有一些时髦的东西。
  • @RomanLuštrik 我查过了。似乎还好。这是我单击特定行时查询生成的内容DELETE FROM TonnageListChartering WHERE TonnageListChartering.timestamp = 1534569538

标签: r shiny dt rsqlite


【解决方案1】:

正如@RomanLustrik 所指出的,timestamp 肯定有一些“时髦”的东西。我不太熟悉sqlite,但运行PRAGMA table_info(TonnageListChartering); 揭示了这一点:

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 以确保时间戳在引号中。

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

这会删除用户选择的行。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多