【问题标题】:Using sqldf and RPostgreSQL together一起使用 sqldf 和 RPostgreSQL
【发布时间】:2012-05-01 12:01:24
【问题描述】:

当使用RPostgreSQL 时,我发现我不能以同样的方式使用sqldf。例如,如果我使用以下代码加载库并将数据读入数据框中:

library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, host="localhost", user="postgres", password="xxx", dbname="yyy", port="5436")
rs <- dbSendQuery(con, "select * from table");                           
df<- fetch(rs, n = -1); dbClearResult(rs) 
dbDisconnect(con) 

我知道数据框df 中有此表的内容。但是,如果我想使用 sqldf 运行 SQL 命令,我以前会这样做:

sqldf("SELECT * FROM df WHERE X > 10")

当我收到错误消息时,这不再有效:

Error in postgresqlNewConnection(drv, ...) : 
  RS-DBI driver: (could not connect postgres@localhost on dbname "test"
)
Error in !dbPreExists : invalid argument type

我认为这是我的操作错误,但我不知道如何向sqldf 提供哪些参数,以便它只关注数据框而不尝试连接到其他任何东西。

【问题讨论】:

    标签: sql r postgresql sqldf rpostgresql


    【解决方案1】:

    在 RPostgreSQL 中使用 sqldf

    sqldf 如果发现 RPostgreSQL 已加载,它将自动与 PostgreSQL 中的 test 数据库一起使用。所以你可以在 PostgreSQL 中创建一个test 数据库,然后使用 sqldf

    或者,您可以指定不同数据库的名称。

    见:sqldf FAQ 12

    将 sqldf 与 RSQLite 结合使用

    如果您想将 sqldf 与 RSQLite 一起使用,而不是与 RPostgreSQL 一起使用,您可以使用 sqldfdrv 参数来强制它使用非默认驱动程序。例如

    sqldf("select foo from bar...",drv="SQLite")
    

    或者,您可以使用"sqldf.driver" 选项全局设置驱动程序。从 R 内部:

    options(sqldf.driver = "SQLite")
    

    或者,如果您希望使用 RSQLite,另一种可能性是在使用 sqldf 之前detach RPostgreSQL,然后再次加载它。

    详情请见?sqldf

    【讨论】:

      【解决方案2】:

      我遇到了同样的错误,我分离了 RPostgeSQL 包,重新运行我的 sqldf 代码,它运行良好 r detach("package:RPostgreSQL", unload=TRUE)

      【讨论】:

        猜你喜欢
        • 2021-12-30
        • 2017-06-08
        • 2020-08-15
        • 2019-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-25
        • 2012-02-10
        相关资源
        最近更新 更多