我有一个数据框,其结构与我的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
思想?
答案 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位)上尝试了上述代码。