R中的sqlSave创建和将数据帧保存到sql表中

bru*_*lin 3 sql db2 r rodbc

嗨,我正在使用R将数据帧保存到DB2 SQL表中。我似乎能够创建表框架,但无法将数据追加到表中-

>df <- read.csv("dat.csv")
Run Code Online (Sandbox Code Playgroud)

其中dat.csv是没有标题的csv,只有两列中的原始数据

然后我创建表:

>sqlQuery(channel, "create table sqltable 
                   (
                   col1  int,
                   col2  float
                   )"
         (
Run Code Online (Sandbox Code Playgroud)

我可以通过选择数据库上的空表“ sqltable”来确认表已创建

所以现在我需要通过执行以下操作将“ dat.csv”中的数据添加到“ sqltable”中:

>sqlSave(channel, df, "sqltable", verbose=T, fast=T, append=T)

no: 1 rownames 1/***/no: 2 col1 31105/***/no: 3 col2 0.001/***/
no: 2 rownames 1/***/no: 2 col1 31106/***/no: 3 col2 0.023/***/
no: 3 rownames 1/***/no: 2 col1 31107/***/no: 3 col2 1.456/***/
no: 4 rownames 1/***/no: 2 col1 31108/***/no: 3 col2 0.001/***/
no: 5 rownames 1/***/no: 2 col1 31109/***/no: 3 col2 2.102/***/
Run Code Online (Sandbox Code Playgroud)

一切都很好,直到我这样做:

>sqlQuery(channel,"select * from sqltable")

[1] COL1     COL2
<0 rows> or 0-length row.names
Run Code Online (Sandbox Code Playgroud)

sqlSave命令清楚地从dat.csv中拾取数据,那么为什么不将其添加到表中呢?我究竟做错了什么?

Nea*_*alC 5

在sqlSave中定义varType是一个好主意。这是我的方法。:-)

columnTypes <- list(ColumnName="varchar(255)", NumberColumn="float", datecolumn="date")
Run Code Online (Sandbox Code Playgroud)

这将为您的数据定义列类型,以便您可以在sqlSave中添加参数。因此,现在就执行sqlSave。

sqlSave(channel, YourTable, rownames = FALSE, varTypes = columnTypes)
Run Code Online (Sandbox Code Playgroud)

如果已经添加了表,则在此之前我将执行sqlDrop。

为什么这是答案?

好吧,我有同样的问题。我收到一个错误消息,说它无法执行sqlSave,但是将其放入数据库的列中。因此,我不得不修复columnTypes。R尝试手动执行此操作,但这并不完美。:-)