【问题标题】:Character columns being converted to numeric when appending to SQL Server Database with DBI package in R使用 R 中的 DBI 包附加到 SQL Server 数据库时,字符列被转换为数字
【发布时间】:2020-05-03 12:03:52
【问题描述】:

我有一个使用 Microsoft SQL Server 托管的数据库。它有一个表project,列有project_id (int identity)、project_code (nvarchar not null) 和api_form (nvarchar)。我已使用 R 中的 DBI 包连接到此并运行以下代码。

dbAppendTable(conn, 'project', data.frame(
  project_code = c("ABC123", "DEF456"),
  api_form = c(NA, NA)
))

然而,当我查询整个表时,我得到以下输出。

project_id  project_code    api_form
1   1   NULL
2   2   NULL

我不确定为什么字符现在是整数。有没有办法将字符数据直接添加到表中,或者,如果这是预期的行为,我如何查询表以找到我输入的实际文本?

【问题讨论】:

  • 这可能是一个因素问题。尝试在data.frame() 调用中将stringsAsFactors=FALSE 作为参数传递。
  • 就是这样。太多的 tibbles 工作让我忘记了这是默认行为。谢谢!

标签: sql r sql-server dbi


【解决方案1】:

data.frame() 调用的经典忽略,默认情况下将字符串转换为因子。您的 project_code 呈现为因子(即带有标签值的数字列)而不是字符。要解决,只需传递stringsAsFactors=FALSE,这样实际的字符值就会附加到数据库表中:

dbAppendTable(conn, 'project', 
              data.frame(
                 project_code = c("ABC123", "DEF456"),
                 api_form = c(NA, NA),
                 stringsAsFactors=FALSE 
              )
)

或者,将参数设置为 R 会话中所有 data.frame() 调用的全局选项:

options(stringsAsFactors = FALSE)

dbAppendTable(conn, 'project', 
              data.frame(
                 project_code = c("ABC123", "DEF456"),
                 api_form = c(NA, NA) 
              )
)

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 2019-07-04
    • 2019-02-13
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2021-05-08
    相关资源
    最近更新 更多