我正在使用R将data.frame插入MySQL数据库。我在下面的代码中一次成功插入1000行。但是,如果我有一个包含数万行的data.frame,那就不实用了。你会如何使用R进行批量插入?它甚至可能吗?
## R and MySQL
library(RMySQL)
### create sql connection object
mydb = dbConnect(MySQL(), dbname="db", user='xxx', password='yyy', host='localhost', unix.sock="/Applications/MAMP/mysql/mysql.sock")
# get data ready for mysql
df = data.format
# chunks
df1 <- df[1:1000,]
df2 <- df[1001:2000,]
df3 <- df[2001:nrow(df),]
## SQL insert for data.frame, limit 1000 rows
dbWriteTable(mydb, "table_name", df1, append=TRUE, row.names=FALSE)
dbWriteTable(mydb, "table_name", df2, append=TRUE, row.names=FALSE)
dbWriteTable(mydb, "table_name", df3, append=TRUE, row.names=FALSE)
答案 0 :(得分:0)
为了完整性,如链接所示,将df写入临时表并按如下方式插入目标表:
dbWriteTable(mydb, name = 'temp_table', value = df, row.names = F, append = F)
dbGetQuery(mydb, "insert into table select * from temp_table")
答案 1 :(得分:0)
基于DBI的ODBC
包现在支持快速批量插入,请参阅
这个例子由Jim Hester(https://github.com/r-dbi/odbc/issues/34)发布:
library(DBI);
con <- dbConnect(odbc::odbc(), "MySQL")
dbWriteTable(con, "iris", head(iris), append = TRUE, row.names=FALSE)
dbDisconnect(con)
由于RMySQL
也是基于DBI的,因此只需“切换”数据库连接即可
使用odbc
包(感谢R的标准化DBI接口)。
自RMySQL
包
...正在逐步取消新的
RMariaDB
包。
根据他们的网站(https://github.com/r-dbi/RMySQL),您可以尝试将驱动程序包切换到RMariaDB
(可能他们已经实现了批量插入功能)。
有关详细信息,请参阅:https://github.com/r-dbi/RMariaDB