如何将完整的数据帧插入到 mysql 数据库的单个表中
这是我的 table
CREATE TABLE `data` (
`iddata` int(11) NOT NULL,
`x` varchar(45) DEFAULT NULL,
`y` varchar(45) DEFAULT NULL,
PRIMARY KEY (`iddata`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这是我的 R 代码:
file <- paste("C:\\Users\\zakaria\\Documents\\RDMZ\\test_rr.csv")
table <- read.table(file,sep=",",header=T)
channel <-odbcConnect(dsn="RSQL",uid="root",pwd="toor")
x <-table[,1]
y<-table[,2]
data<-sqlQuery(channel,paste("INSERT INTO 'data'.'dbwin'('x','y') VALUES (", x,", ", y, ");"))
sqlQuery(channel,data)
我有这个错误
[1] "42000 1064 [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.17]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '42000 1064 [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.17]You have an error in your S' at line 1"
[2] "[RODBC] ERROR: Could not SQLExecDirect '42000 1064 [MySQL][ODBC 5.2(w) Driver][mysqld-5.6.17]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''data'.'dbwin'('x','y') VALUES ( 0.708007801949862 , 84 )' at line 1'"
谢谢你的帮助
最佳答案
最好的方法是按照 @joran 的建议:使用 sqlSave(...)
,就是为此而设计的。
您的代码无法运行有多种原因。一个问题是您定义 x
和y
如varchar
,但您不引用 sql 中的字符串。
x<-"A"
y<-"B"
sql <- paste("INSERT INTO 'data'.'dbwin'('x','y') VALUES (", x,", ", y, ");")
cat(sql)
# INSERT INTO 'data'.'dbwin'('x','y') VALUES ( A , B );
相反,使用这个:
sql <- paste0("INSERT INTO 'data'.'dbwin'('x','y') VALUES (\"", x,"\", \"", y, "\");")
cat(sql)
# INSERT INTO 'data'.'dbwin'('x','y') VALUES ("A", "B");
第二个是您不需要在 sql 中包含数据库名称,因为该信息已嵌入在连接中。相反,使用类似的东西:
sql <- "INSERT INTO data (x,y) values (\"A\",\"B\")"
最后,也是最重要的,这种形式的 INSERT 会向数据库表中添加一行,因此您不能对 x 和 y 使用向量(就像您的代码那样)。这是一个解决方法:
## not tested
apply(table[,1:2], 1, function(values) {
x <- values[1]
y <- values[2]
sql <- paste0("INSERT INTO data (x,y) VALUES (\"", x,"\", \"", y, "\");")
data <-sqlQuery(channel,sql)
sqlQuery(channel,data)
})
这将(应该..)为 table
的每一行执行 SQL INSERT 。它可能会慢于 sqlSave(...)
不过。
最后,您不需要两次调用 sqlQuery(...)
.
关于mysql - 使用 R 和 ORDBC 在数据库的单个表上插入数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22842594/