R编程 - 更新满足条件的mysql db行

时间:2015-11-11 21:28:08

标签: r

我有一个数据框,其结构与我的mysql数据库中的表相同。我想更新mysql数据库的行,其中我的数据框的主键和该表匹配。

例如

DF 1

PK Count  Temperature
3    1        111
4    2        100
5    3        190
6    4        200

MySQL Table

        PK Count  Temperature
        1    1        100
        2    10       11
        3    0        0
        4    0        0
        5    0        0
        6    0        0
        7    0        0
        8    0        0

请注意,我不能简单地覆盖表格,因为我的数据库中有行,而我的数据框中没有这些行。

更新后,我想要的是下表。

 PK Count  Temperature
    1    1        100
    2    10       11
    3    1        111
    4    2        100
    5    3        190
    6    4        200
    7    0        0
    8    0        0

思想?

2 个答案:

答案 0 :(得分:0)

所以,我还没有能够直接更新一行。但是,我所做的是在我的数据库中创建一个可以从R追加的保存表。然后我在我的数据库中创建了一个触发器来更新所需表中的所需行。从他们那里,我创造了另一个触发器来清空我的握持表。

这是Dean的建议,但有点不同。

答案 1 :(得分:0)

在这里,我提供了一种替代方法,即将帧写入临时表并在主表中执行更新或获取保持表,追加并通过触发方法更新所需的表。

我认为以下方法简单有效,因为它直接在目标表中执行更新记录。

#install.packages("RMySQL")
#install.packages("DBI")
library(DBI)
library(RMySQL)

#Establish the connection
mydb = dbConnect(MySQL(), 
                  user='your  user', 
                  password='your  password', 
                  dbname='your DB name', 
                 host='Host Name')
#Eusuring the connection working by listing table
dbListTables(mydb)

#Applying update statement directly
rs = dbSendQuery(mydb, "UPDATE DB_NAME.TABLE_1 
SET    FIELD_1 = 0 
                 WHERE  ID = 5")

#Verifying the result
rs = dbSendQuery(mydb, "SELECT * FROM DB_NAME.TABLE_1
                 WHERE  ID = 5")
data = fetch(rs, n=-1)
print(data)

我在R Studio版本1.1.453和R 3.5.0(64位)上尝试了上述代码。