2014-09-04 74 views
0

R是絕對的初學者,所以請原諒任何明顯的問題。如何使用RODBC將數據框添加到mysql表中

我想用Deducer的數據框更新一個MySQL表(數據庫'test'中的'exdata3')。

我最初調用數據庫並使用推演器中的表,運行一些存儲在數據框'data1'中的查詢。現在我想發送包含新列的'data1',並更新MySQL中的非空表exdata3。

(在未來相比,在MySQL中同一列,我可能不會有新的列/行,但現有的列可能在數據幀不同的值,如果你知道我的意思)

之間的差異數據框和MySQL中的表格是在數據框中添加一列'DiffHighLow'(其中包含表中另外兩個庫侖計算的值)。

我使用RODBC在64位的Windows7

我試圖與後續錯誤下述R和MySQL之間進行通信。

1.> sqlSave(信道,DATA1,exdata3,追加= TRUE,rownames = 「DiffHighLow」,colnames = TRUE,冗長= FALSE,更安全= TRUE,addPK = FALSE, 「整數」,快= TRUE,測試= FALSE,nastring = NULL)

錯誤sqlSave(信道,DATA1,exdata3,追加= TRUE,rownames = 「DiffHighLow」: 對象 'exdata3' 未找到

2.> sqlSave (channel,data1,rownames =「DiffHighLow」,addPK = TRUE)

sqlSave錯誤(channel,data1,rownames =「DiffHighLow」,addPK = TRUE): 42S21 1060 [MySQL] [ODBC 5.3(w)驅動程序] [mysqld-5.0.41-community-nt]重複的列名'diffhighlow '

[RODBC]錯誤:無法SQLExecDirect的' CREATE TABLE data1DiffHighLow VARCHAR(255)NOT NULL PRIMARY KEY,exdata3_id整數,date雙,open雙,high雙,low雙,close雙,shares_整數,turnover_雙倍,diffhighlow雙)'

3。 > SQLUPDATE(信道,DATA1, 「exdata3」)

錯誤SQLUPDATE(信道,DATA1, 「exdata3」): 數據幀列(多個)日期開高低靠近shares_ turnover_ diffhighlow不是在數據庫表

我不明白,爲什麼它不識別數據庫表中已存在的行名稱,除了'DiffHighLow'

請指教。我已經在這麼多的問題上搜索了這樣的問題,並嘗試了已發佈的各種解決方案(這些解決方案看起來與我的查詢最相似),但它們都沒有工作。

回答

1

如果我的理解正確,您將表中的內容exdata3從MySQL數據庫加載到R中,並通過添加新列,DiffHighLow等來修改它,現在您要將它保存回MySQL數據庫。如果這是你正在嘗試做的,這將工作:

# this just sets up the example 
set.seed(1) # for reproducible example 
df <- data.frame(Open=rnorm(50), Low=rnorm(50), High=rnorm(50), Close=rnorm(50)) 
library(RODBC) 
channel <- odbcConnect(dsn="MySQL", case="nochange") 
sqlSave(channel,df,"exdata3", rownames=F) 

data1 <- sqlQuery(channel,"select * from exdata3") 
data1 <- transform(data1,DiffHighLow=High-Low) 

# you start here 
sqlQuery(channel,"drop table exdata3") 
sqlSave(channel,data1,"exdata3") 
result <- sqlQuery(channel,"select * from exdata3") 
head(result) 

的基本問題是,sqlSave(...)需要要麼的MySQL表根本不存在(在這種情況下,它會創建),它具有完全映射到數據庫中的列的列。您不能使用sqlSave(...)添加列。因此,此代碼只是刪除exdata3的原始版本,然後從data1中的數據創建新副本。最後一行只是讀回表格以證明它的工作。

您的代碼有幾個問題。

第一次嘗試失敗,因爲您傳遞的變量名稱爲exdata3,而不是字符串"exdata3"。您的R環境中沒有名爲exdata3的變量,因此出現錯誤:「找不到」對象'exdata3'「。

第二次嘗試失敗,因爲您告訴ODBC驅動程序將數據幀的行名稱保存在名爲diffhighlow的列中,但該名稱中已有一列data1,所以驅動程序試圖創建兩列同名。

第三次嘗試失敗,因爲exdata3中的列未映射到data1中的列。

+0

非常感謝您的詳細解釋。是的,這正是我想要做的。我必須嘗試幾次並在最終解決問題之前解決一些小錯誤。 – Tanvi 2014-09-05 06:18:33

相關問題