Добавить столбец в существующую таблицу mysql, используя 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) 

Но с этим последним оператором я перезаписываю существующую таблицу новой, тем самым теряя все соответствующие типы переменных.

Затем я попробовал обходной путь. Запишите новые данные в новый table в 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

person Thomas    schedule 06.03.2015    source источник


Ответы (2)


Вы пытались изменить свою таблицу с помощью SQL с оператором ALTER TABLE?

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

Затем вы можете просто отправить оператор UPDATE, чтобы добавить новые значения.

Попробуйте сначала с методом dbExecute()... и попробуйте это на консоли R:

?dbExecute or ?dbSendStatement

Проверьте это также: RMySQL dbWriteTable с field.types

person eddy85br    schedule 30.09.2016

Добавление столбца в существующую таблицу может быть выполнено следующим образом:

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* 
person Jaba    schedule 24.09.2015
comment
Кажется, мой вопрос был двусмысленным. Простите за это. Я знаю, как это сделать в R. Однако я хотел бы знать, как я могу сделать это в MySQL из R... - person Thomas; 24.09.2015