我在使用 RODBC 将数据框插入 mySql 数据库时遇到一些困难。 下面是我正在使用的代码:
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"))
这对我来说没有任何意义,因为列已经在具有相同列名的数据框中。
最佳答案
我知道这是一个非常老的问题,但是我刚才遇到了(并为我的实例解决了)同样的问题,得到了这个错误
Error in odbcUpdate(channel, query, mydata, coldata[m, ], test = test, :
missing columns in 'data'
来自使用
sqlSave(
在 rodbc 包中。
我通过设置解决了
,fast = F
如果第一个 google 搜索结果中的其他人落在这里,希望这对您有所帮助
编辑: 所以我从那以后就更多地研究了这个。 按照我在下面的建议将标志设置为“F”时,将行逐行插入数据库。 虽然它是“T”,但如果一行不正确,它就会失败,但现在那一行失败了,而你不知道它。所以数据库可能丢失了您认为在那里的数据。 检查数据库中的行数与您希望从数据框中插入的行数。 您可能有一个不兼容的值。我现在要做的是在循环中使用“粘贴”函数来创建一个字符串,例如“插入 tableName 值(“eg1”,“eg2”)”这样我就可以得到错误消息,说明为什么它没有去进入数据库
关于mysql - RODBC sqlSave 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910592/