【问题标题】:Writing and Updating DB2 tables with r使用 r 编写和更新 DB2 表
【发布时间】:2016-02-10 19:16:39
【问题描述】:

我不知道如何在 R 中更新现有的 DB2 数据库或更新其中的单个值。

除了非常笼统的信息,我在网上找不到太多关于这个主题的信息,但没有具体的例子。

        library(RJDBC)

        teachersalaries=data.frame(name=c("bob"), earnings=c(100))




        dbSendUpdate(conn, "UPDATE test1 salary",teachersalaries[1,2])

       teachersalaries=data.frame(name=c("bob",'sally'), earnings=c(100,200))




        dbSendUpdate(conn, "INSERT INTO test1 salary", teachersalaries[which(teachersalaries$earnings>200,] )

【问题讨论】:

  • 连接顺利吗? conn 对象有效吗?
  • 是的,我已经建立了连接。我可以创建一个全新的表,但我不知道如何编写附加值或更新字段。我遇到了麻烦并且无法理解那里的文档。我所需要的只是一个如何做到这一点的例子!我希望能够从我拥有的现有数据框中添加行,而不是逐行输入值。
  • 我放弃了 RJDBC,因为 IBM ODBC 驱动程序提供了更好的功能,这些驱动程序现在有 32 位和 64 位版本。一旦在您的机器上设置了日期源,RODBC 包就可以通过 RODBC::sqlupdate 和 RODBC::sqlsave 等功能让您更好地控制

标签: r database db2 rjdbc


【解决方案1】:

您是否尝试过像使用其他语言一样传递常规 SQL 语句?

dbSendUpdate(conn, "UPDATE test1 set salary=? where id=?", teachersalary, teacherid)

dbSendUpdate(conn,"INSERT INTO test1 VALUES (?,?)",teacherid,teachersalary)

基本上,您使用参数标记(那些问号)指定常规 SQL DML 语句,并提供值列表作为逗号分隔的参数。

【讨论】:

    【解决方案2】:

    试试这个,它对我很有效。

    dbSendUpdate(conn,"INSERT INTO test1 VALUES (?,?)",teacherid,teachersalary)
    

    您只需像在任何编程语言中一样传递一个常规 SQL 片段。试试看。

    【讨论】:

      【解决方案3】:

      为了同时更新多行,我构建了以下函数。

      我已经用多达 10,000 行的批次对其进行了测试,并且效果很好。

      # Libraries
      library(RJDBC)
      library(dplyr)    
      
      # Function upload data into database
      db_write_table <- function(conn,table,df){
        # Format data to write
        batch <- apply(df,1,FUN = function(x) paste0("'",trimws(x),"'", collapse = ",")) %>%
        paste0("(",.,")",collapse = ",\n")
      
        #Build query
        query <- paste("INSERT INTO", table ,"VALUES", batch)
      
        # Send update
        dbSendUpdate(conn, query)
      }
      
      # Push data
      db_write_table(conn,"schema.mytable",mydataframe) 
      

      感谢其他作者。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多