Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/r-dbi/dbi
A database interface (DBI) definition for communication between R and RDBMSs
https://github.com/r-dbi/dbi
database interface r
Last synced: 4 days ago
JSON representation
A database interface (DBI) definition for communication between R and RDBMSs
- Host: GitHub
- URL: https://github.com/r-dbi/dbi
- Owner: r-dbi
- License: lgpl-2.1
- Created: 2013-10-16T05:17:38.000Z (about 11 years ago)
- Default Branch: main
- Last Pushed: 2024-12-10T02:19:03.000Z (13 days ago)
- Last Synced: 2024-12-13T17:08:37.729Z (10 days ago)
- Topics: database, interface, r
- Language: R
- Homepage: https://dbi.r-dbi.org
- Size: 18.2 MB
- Stars: 300
- Watchers: 24
- Forks: 74
- Open Issues: 14
-
Metadata Files:
- Readme: README.Rmd
- Changelog: NEWS.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE.md
- Code of conduct: .github/CODE_OF_CONDUCT.md
- Security: .github/security.md
Awesome Lists containing this project
README
---
output: github_document
---```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
)
```# DBI
[![Lifecycle: stable](https://img.shields.io/badge/lifecycle-stable-brightgreen.svg)](https://lifecycle.r-lib.org/articles/stages.html#stable)
[![rcc](https://github.com/r-dbi/DBI/workflows/rcc/badge.svg)](https://github.com/r-dbi/DBI/actions)
[![Coverage Status](https://codecov.io/gh/r-dbi/DBI/branch/main/graph/badge.svg)](https://app.codecov.io/github/r-dbi/DBI?branch=main)
[![CRAN_Status_Badge](https://www.r-pkg.org/badges/version/DBI)](https://cran.r-project.org/package=DBI)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/1882/badge)](https://bestpractices.coreinfrastructure.org/projects/1882)The DBI package helps connecting R to database management systems (DBMS).
DBI separates the connectivity to the DBMS into a "front-end" and a "back-end".
The package defines an interface that is implemented by *DBI backends* such as:- [RPostgres](https://rpostgres.r-dbi.org),
- [RMariaDB](https://rmariadb.r-dbi.org),
- [RSQLite](https://rsqlite.r-dbi.org),
- [odbc](https://github.com/r-dbi/odbc),
- [bigrquery](https://github.com/r-dbi/bigrquery),and many more, see the [list of backends](https://github.com/r-dbi/backends#readme).
R scripts and packages use DBI to access various databases through their DBI backends.The interface defines a small set of classes and methods similar in spirit to Perl's [DBI](https://dbi.perl.org/), Java's JDBC, Python's [DB-API](https://www.python.org/dev/peps/pep-0249/), and Microsoft's [ODBC](https://en.wikipedia.org/wiki/ODBC).
It supports the following operations:* connect/disconnect to the DBMS
* create and execute statements in the DBMS
* extract results/output from statements
* error/exception handling
* information (meta-data) from database objects
* transaction management (optional)## Installation
Most users who want to access a database do not need to install DBI directly.
It will be installed automatically when you install one of the database backends:- [RPostgres](https://rpostgres.r-dbi.org) for PostgreSQL,
- [RMariaDB](https://rmariadb.r-dbi.org) for MariaDB or MySQL,
- [RSQLite](https://rsqlite.r-dbi.org) for SQLite,
- [odbc](https://github.com/r-dbi/odbc) for databases that you can access via [ODBC](https://en.wikipedia.org/wiki/Open_Database_Connectivity),
- [bigrquery](https://github.com/r-dbi/bigrquery),
- ... .You can install the released version of DBI from [CRAN](https://CRAN.R-project.org) with:
``` r
install.packages("DBI")
```And the development version from [GitHub](https://github.com/) with:
``` r
# install.packages("devtools")
devtools::install_github("r-dbi/DBI")
```## Example
The following example illustrates some of the DBI capabilities:
```{r example}
library(DBI)
# Create an ephemeral in-memory RSQLite database
con <- dbConnect(RSQLite::SQLite(), dbname = ":memory:")dbListTables(con)
dbWriteTable(con, "mtcars", mtcars)
dbListTables(con)dbListFields(con, "mtcars")
dbReadTable(con, "mtcars")# You can fetch all results:
res <- dbSendQuery(con, "SELECT * FROM mtcars WHERE cyl = 4")
dbFetch(res)
dbClearResult(res)# Or a chunk at a time
res <- dbSendQuery(con, "SELECT * FROM mtcars WHERE cyl = 4")
while (!dbHasCompleted(res)) {
chunk <- dbFetch(res, n = 5)
print(nrow(chunk))
}
dbClearResult(res)dbDisconnect(con)
```## Class structure
There are four main DBI classes.
Three which are each extended by individual database backends:* `DBIObject`: a common base class for all DBI.
* `DBIDriver`: a base class representing overall DBMS properties.
Typically generator functions instantiate the driver objects like `RSQLite()`,
`RPostgreSQL()`, `RMySQL()` etc.* `DBIConnection`: represents a connection to a specific database
* `DBIResult`: the result of a DBMS query or statement.
All classes are _virtual_: they cannot be instantiated directly and instead must be subclassed.
## Further Reading
* [Databases using R](https://db.rstudio.com/) describes the tools and best practices in this ecosystem.
* The [DBI project site](https://r-dbi.org/) hosts a blog where recent developments are presented.
* [A history of DBI](https://dbi.r-dbi.org/articles/DBI-history.html) by David James, the driving force behind the development of DBI, and many of the packages that implement it.
---
Please note that the _DBI_ project is released with a [Contributor Code of Conduct](https://dbi.r-dbi.org/CODE_OF_CONDUCT.html).
By contributing to this project, you agree to abide by its terms.