我在使用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))' –