knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-", out.width = "100%" ) requireNamespace("dbplyr")
DBI and dplyr wrappers to write to DB, fetch and run data manipulation operations on server side.
We define $.DBIConnection(), $<-.DBIConnection() and
!.tbl_lazy() to be able to :
con$foo <- my_data_frame (where con is a connection built with
DBI::dbConnect() or this package's db_connect), short for
DBI::dbWriteTable(con, "foo", my_data_frame)con$foo, short for dplyr::tbl(con, "foo"),
so it can be used to do some server side data manipulation using dplyr!my_lazy_table (or directly
!con$foo), equivalent to dplyr::collect(my_lazy_table) or
dplyr::collect(dplyr::tbl(con, "foo")). separator as we would in
an SQL query. In that case con$my_schema.my_table is equivalent to
dplyr::tbl(con, dbplyr::in_schema("my_schema", "my_table"))Install with :
remotes::install_github("moodymudskipper/easydb")
We offer a simple wrapper around DBI::dbConnect that makes it easy to use specs stored in a list and makes it easier to choose the relevant driver.
library(easydb) # Used just as DBI::dbConnect() db <- db_connect(RSQLite::SQLite(), path = ":memory:") # Using shorthand db <- db_connect("sqlite", path = ":memory:") # Using a list of specs specs <- list(drv = "sqlite", path = ":memory:") db <- db_connect(specs) # Or just, for this specific case, just use the defaults and it will create # an SQLite database in memory db <- db_connect()
To write or fetch :
db$foo <- head(cars,2) db$bar <- head(iris,2) dplyr::db_list_tables(db) db$foo !db$foo
By default one can't overwrite a table, it would need to be removed first, which
you can do by calling db$table_to_delete <- NULL
db$foo <- tail(cars,2) db$foo <- NULL db$foo <- tail(cars,2) !db$foo
We can allow overwriting by setting the option easydb.overwrite to TRUE.
options(easydb.overwrite = TRUE) db$bar <- tail(iris,2) !db$bar
We can attach or create a schema with the following syntax (here creating a
schema named "aux" in a temporary file) :
db$aux. <- tempfile()
Then we can use a smilar syntax to what's already been showed, by prefixing table names with the schema name and a dot.
db$aux.baz <- head(mtcars[1:4], 2) !db$aux.baz
with()We provide a method with.DBIConnection() that can be used to do operators "in"
the database. Just as base:::with.default() looks for the symbol of the expression in its first argument first, with.DBIConnection() searches for the tables first in the database using the standard with().
A difference is that one can assign inside of the database directly by using <- in the expression.
with(db,{ # new table from r data baz <- head(mtcars,2) # create new table from dbms data, all computed on server side qux <- dplyr::union_all(foo,foo) }) db$baz db$qux
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.