我在使用RODBC將數據框插入到mySql數據庫時遇到了一些困難。 下面是我使用的代碼:RODBC的問題sqlSave
data <- data.frame(analysedDataID=c(1,2,3), plateWell=c("a","b","c"), screenPlateOrder=c(1,2,3), wellData=c("A","B","C"))
con <- odbcConnect(DSN, uid="user_id", pwd="some_password")
query <- sqlSave(con, data, tablename = 'wellAnalysedDataTable', rownames=FALSE, append=TRUE)
當我嘗試執行此我得到以下錯誤信息:
Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test, :
missing columns in 'data'
這裏是我想要插入數據的特定表成:
+------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+-------------+------+-----+---------+-------+
| analysedDataID | int(10) | YES | | NULL | |
| plateWell | varchar(10) | YES | | NULL | |
| screenPlateOrder | int(10) | YES | | NULL | |
| wellData | varchar(30) | YES | | NULL | |
+------------------+-------------+------+-----+---------+-------+
我只是真的在這一點困惑,我在閱讀文檔,一遍又一遍,但就是不能把這個工作。任何幫助將不勝感激!
乾杯!
謝謝!我添加了您所建議的更改,並且現在似乎還沒有出現問題。不過,我不斷收到以下錯誤信息:
'index column(s) analysedDataID plateWell screenPlateOrder wellData not in data frame'
我執行語句生成是這樣的:
sqlUpdate(con, data, tablename="wellAnalysedDataTable", index=c("analysedDataID", "plateWell", "screenPlateOrder", "wellData"))
這沒有任何意義,我作爲列已經在數據框具有相同的名稱。
嗨GSK3。感謝您的回覆。我嘗試了您的建議更改,但仍無法使其正常工作。我不斷收到另一條錯誤消息:「無法附加到表'wellanalyseddatatable'」。我注意到tablename變量似乎將輸入字符轉換爲全部小寫,這意味着它不匹配我想插入數據框的表。你有什麼想法我可以如何區分大小寫?我試着查看RODBC的文檔,但似乎沒有提及它。 – hberven1
如果您鍵入'odbcUpdate',您將獲得整個函數定義。從那裏你可以看到該頻道有一個名爲「case」的屬性,它被設置爲上限或下限。不知道爲什麼沒有「保留」選項,但您可能會用自己的函數版本覆蓋odbcUpdate。相關行是'cnames < - switch(attr(channel,「case」),nochange = cnames, toupper = toupper(cnames),tolower = tolower(cnames))' –