将数据框中的一行数据直接插入R中的数据库

Posted

技术标签:

【中文标题】将数据框中的一行数据直接插入R中的数据库【英文标题】:insert a row of data from a data frame directly to a database in R 【发布时间】:2015-09-25 13:14:23 【问题描述】:

我能够将一行插入数据库,在 R 中逐个值如下

#connect
conn = odbcDriverConnect("Driver=SQL Server; Server=MyServerName; Database=MyDBName; Uid=IAMTubby; Pwd=abcd;")

#insert
myquery = "insert into MyTableName values('1234','M','6','3');"
res = sqlQuery(conn, myquery)

但是,我想将数据框的第一行直接插入到 sql 中,而不是将它们分离为值。我怎样才能做到这一点? 比如说,我的数据框如下所示,并且与数据库具有相同的架构

> df[1,]
  col1 col2 col3 col4
1 1234    M    6    3

编辑:我尝试了 sqlSave,但是当我执行以下代码时我的 RStudio 崩溃了。我哪里错了?

SQL-Server 中的建表代码

#table creation
use DBName

CREATE TABLE Persons
(
col1 varchar(255),
col2 varchar(255),
col3 varchar(255),
);

R胶水代码

#library
library("RODBC")

#connect
conn = odbcDriverConnect("Driver=SQL Server; Server=MyServer; Database=DBName; Uid=username; Pwd=abcd;")

#inserting a data frame
df = NULL
df$col1 = '1'
df$col2 = '2'
df$col3 = '3'
df = as.data.frame(df)
sqlSave(conn, df[1,], tablename = "Persons", append = TRUE)

【问题讨论】:

你看过RODBC::sqlSave吗?看来您可以通过在此函数中设置 append = TRUE 来完成此操作。 尝试在sqlSave() 命令中添加参数rownames=FALSE 【参考方案1】:

选项 1:您可以像这样动态创建查询:

df = data.frame(col1 = 1234, col2 = "M", col3 = 6, col4 = 3) 
myquery = paste0("insert into MyTableName values(", paste0("'", df[1,], "'", collapse = ", "), ");")

这会将以下字符串保存在对象 myquery 中:

 "insert into MyTableName values('1234', '1', '6', '3');"

选项 2:

正如@nrussell 所说,您还应该能够使用 RODBC 包中的 sqlSave 函数:

sqlSave(conn, df[1,], tablename = "MyTableName", append = TRUE)

【讨论】:

你已经理解我的问题了。但不是附加 df[1,1]、df[1,2] 等并创建一个字符串,我想知道是否有办法直接将 df[1,] 写入数据库。如果我在数据库中的表具有与数据框 df 相同的模式(4 列,col1,col2,col3,col4),则类似于插入 MyTableName df[1,]

以上是关于将数据框中的一行数据直接插入R中的数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何将 mysql 中的数据插入到组合框中?

如何将文本框中的日期插入数据库

将 JavaScript 中的值直接插入 MySQL 数据库

如何将文本框中的数据插入到 java-netbeans 中的 mysql 数据库中

直接插入排序的比较次数移动次数和赋值次数 最小/最大/平均值

MaxCompute数据仓库在更新插入直接加载全量历史表三大算法中的数据转换实践