2

我有一个 postgresql 数据库连接,想从数据库中获取一个表。大概将连接信息保存在不同的文件中是一种好习惯?我现在有两个文件:

#getthetable.R
library(tidyverse)
library(dbplyr)


## connect to db
con <- src_postgres(dbname = "thedbname",
                    host = "blablabla.amazonaws.com",
                    port = NULL,
                    user = "myname",
                    password = "1234")

thetable <- tbl(con, "thetable") %>% select(id, apples, carrots) %>% collect

接着:

#main.R
library(tidyverse)

## get data from getthetable script with connection
source("rscripts/getthetable.R") 

现在这使得main.R 中的con和变量都可用。thetable我只想要thetablegetthetable.R 中的变量。我怎么做?遗漏 con 变量?

此外,在 r 中使用 db 连接时是否有最佳实践?我的想法合乎逻辑吗?我正在做的事情是否有缺点,或者大多数人只是将连接与主要脚本放在一起?

4

1 回答 1

2

我也喜欢在不同的文件中捕获这些东西(如连接),但也可以在这样的指定环境中:

ConnectionManager <- local({

  con <- src_postgres(dbname = "thedbname",
                      host = "blablabla.amazonaws.com",
                      port = NULL,
                      user = "myname",
                      password = "1234")



  collectTable <- function() {

    tbl(con, "thetable") %>% select(id, apples, carrots) %>% collect

  }

  list(collectTable = collectTable)


})

这样,您ConnectionManager在获取文件后只有一个对象,并且可以使用ConnectionManager$collectTable(). 此外,您可以轻松扩展它以获取其他表或包含一些连接实用程序功能。

于 2017-07-12T13:07:41.150 回答