gpt4 book ai didi

mysql - 使用 RMySQL 将列添加到现有的 mysql 表中

转载 作者:可可西里 更新时间:2023-11-01 08:30:11 25 4
gpt4 key购买 nike

我希望能够在现有的 table 中添加一列及其对应的类型。

我是这样尝试的:

library("RMySQL")


# Connect to DB
v_db <- dbConnect(MySQL(),
user="USERNAME", password="PASSWORD",
dbname="DBNAME", host="localhost")
on.exit(dbDisconnect(v_db))

#Read in my new data (into R)
newcolumn <- read.csv("test.csv")
newcolumn
id datafornewcolumn
1 4
2 5
3 8

dbq <- dbSendQuery(v_db, "SELECT * FROM `EXISTINGTABLE`")
dbq <- fetch(dbq, n = -1)
dbq
id existing columns
1 ...
2 ...
3 ...

dbWriteTable(v_db, "EXISTINGTABLE", merge(dbq, newcolumn, by="id", all.x=TRUE), row.name=FALSE, overwrite=T)

但在最后一条语句中,我用新表覆盖了现有表,从而丢失了所有相应的变量类型。

然后我尝试了一种解决方法。将新数据写入 SQL 中的新 ,然后将其合并到 EXISTINGTABLE。但是,我似乎无法正确地做到这一点:

dbSendQuery(v_db, "create table workaround (id int not null primary key, 
newcolumn DECIMAL(3,1))")

#write data into that new empty table called workaround --> works fine
dbWriteTable(v_db, "workaround", neu, row.name=FALSE, append=TRUE)

#something works...
dbSendQuery(v_db, "SELECT * FROM EXISTINGTABLE
LEFT JOIN workaround ON EXISTINGTABLE.id = workaround.id
UNION
SELECT * FROM EXISTINGTABLE
RIGHT JOIN workaround ON EXISTINGTABLE.id = workaround.id")
<MySQLResult:(29344,26,2)>

结果应该是这样的:

 EXISTINGTABLE
id existingcolumns datafornewcolumn
1 ... 4
2 ... 5
3 ... 8

最佳答案

您是否尝试过使用带有 ALTER TABLE 语句的 SQL 来修改您的表?

rs <- dbSendStatement(v_db, "ALTER TABLE table_name ADD COLUMN [...]")
dbHasCompleted(rs)
dbGetRowsAffected(rs)
dbClearResult(rs)

然后您可以简单地发送和更新语句来添加新值。

首先尝试使用 dbExecute() 方法...然后在 R 控制台上尝试:

?dbExecute?dbSendStatement

也检查一下:RMySQL dbWriteTable with field.types

关于mysql - 使用 RMySQL 将列添加到现有的 mysql 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28898857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com