簡體   English   中英

使用RMySQL將列添加到現有的mysql表中

[英]Add column into existing mysql table using RMySQL

我希望能夠將列添加到具有相應類型的現有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中的新table ,然后將其合並到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

將列添加到現有表可以完成如下:

library(dbConnect) # *loads the packages Loading required package: RMySQL
                                        Loading required package: DBI
                                        Loading required package: methods
                                        Loading required package: gWidgets*


mydb =dbConnect(MySQL(),user='root',password='newpass',dbname='database_name', host='localhost')

my_table <- dbReadTable(conn=mydb,name='table_name') 
my_table$column_name<- NA # *creates new column named column_name and populates its value NA*
head(my_table) # *shows the data* 

您是否嘗試使用帶有ALTER TABLE語句的SQL修改表?

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

然后您可以簡單地發送和UPDATE語句來添加新值。

首先嘗試使用dbExecute()方法...並在R控制台上嘗試此操作:

?dbExecute?dbSendStatement

檢查一下: RMySQL dbWriteTable with field.types

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM