Learn R Programming

⚠️There's a newer version (1.2.2) of this package.Take me there.

DBI

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:

and many more, see the list of backends. 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, Java’s JDBC, Python’s DB-API, and Microsoft’s 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:

You can install the released version of DBI from CRAN with:

install.packages("DBI")

And the development version from GitHub with:

# install.packages("devtools")
devtools::install_github("r-dbi/DBI")

Example

The following example illustrates some of the DBI capabilities:

library(DBI)
# Create an ephemeral in-memory RSQLite database
con <- dbConnect(RSQLite::SQLite(), dbname = ":memory:")

dbListTables(con)
#> character(0)
dbWriteTable(con, "mtcars", mtcars)
dbListTables(con)
#> [1] "mtcars"

dbListFields(con, "mtcars")
#>  [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
#> [11] "carb"
dbReadTable(con, "mtcars")
#>    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> 1 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#> 2 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#> 3 22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
#> 4 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
#> 5 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
#> 6 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
#> 7 14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#> 8 24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
#> 9 22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
#>  [ reached 'max' / getOption("max.print") -- omitted 23 rows ]

# You can fetch all results:
res <- dbSendQuery(con, "SELECT * FROM mtcars WHERE cyl = 4")
dbFetch(res)
#>    mpg cyl  disp hp drat    wt  qsec vs am gear carb
#> 1 22.8   4 108.0 93 3.85 2.320 18.61  1  1    4    1
#> 2 24.4   4 146.7 62 3.69 3.190 20.00  1  0    4    2
#> 3 22.8   4 140.8 95 3.92 3.150 22.90  1  0    4    2
#> 4 32.4   4  78.7 66 4.08 2.200 19.47  1  1    4    1
#> 5 30.4   4  75.7 52 4.93 1.615 18.52  1  1    4    2
#> 6 33.9   4  71.1 65 4.22 1.835 19.90  1  1    4    1
#> 7 21.5   4 120.1 97 3.70 2.465 20.01  1  0    3    1
#> 8 27.3   4  79.0 66 4.08 1.935 18.90  1  1    4    1
#> 9 26.0   4 120.3 91 4.43 2.140 16.70  0  1    5    2
#>  [ reached 'max' / getOption("max.print") -- omitted 2 rows ]
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))
}
#> [1] 5
#> [1] 5
#> [1] 1
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 describes the tools and best practices in this ecosystem.

  • The DBI project site hosts a blog where recent developments are presented.

  • A history of DBI 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. By contributing to this project, you agree to abide by its terms.

Copy Link

Version

Install

install.packages('DBI')

Monthly Downloads

696,767

Version

1.2.1

License

LGPL (>= 2.1)

Issues

Pull Requests

Stars

Forks

Maintainer

Kirill M<c3><bc>ller

Last Published

January 12th, 2024

Functions in DBI (1.2.1)

dbAppendTable

Insert rows into a table
dbCreateTableArrow

Create a table in the database based on an Arrow object
dbCreateTable

Create a table in the database
dbCanConnect

Check if a connection to a DBMS can be established
dbBind

Bind values to a parameterized/prepared statement
dbAppendTableArrow

Insert rows into a table from an Arrow stream
dbClearResult

Clear a result set
dbColumnInfo

Information about result types
dbConnect

Create a connection to a DBMS
dbCallProc

Call an SQL stored procedure
dbFetchArrow

Fetch records from a previously executed query as an Arrow object
dbExistsTable

Does a table exist?
dbDriver

Load and unload database drivers
dbFetch

Fetch records from a previously executed query
dbExecute

Change database state
dbFetchArrowChunk

Fetch the next batch of records from a previously executed query as an Arrow object
dbGetConnectArgs

Get connection arguments
dbGetDBIVersion

Determine the current version of the package.
dbIsValid

Is this DBMS object still valid?
dbDataType

Determine the SQL data type of an object
dbIsReadOnly

Is this DBMS object read only?
dbDisconnect

Disconnect (close) a connection
dbGetRowsAffected

The number of rows affected
dbGetException

Get DBMS exceptions
dbGetQuery

Retrieve results from a query
dbGetInfo

Get DBMS metadata
dbHasCompleted

Completion status
dbGetRowCount

The number of rows fetched so far
dbGetQueryArrow

Retrieve results from a query as an Arrow object
dbListConnections

List currently open connections
dbGetStatement

Get the statement associated with a result set
dbListResults

A list of all pending results
dbListObjects

List remote objects
dbQuoteIdentifier

Quote identifiers
dbListTables

List remote tables
dbReadTable

Read database tables as data frames
dbReadTableArrow

Read database tables as Arrow objects
dbQuoteLiteral

Quote literal values
dbQuoteString

Quote literal strings
dbListFields

List field names of a remote table
dbWithTransaction

Self-contained SQL transactions
dbUnquoteIdentifier

Unquote identifiers
dbWriteTable

Copy data frames to database tables
.SQL92Keywords

Keywords according to the SQL-92 standard
dbSendStatement

Execute a data manipulation statement on a given database connection
dbSendQueryArrow

Execute a query on a given database connection for retrieval via Arrow
dbWriteTableArrow

Copy Arrow objects to database tables
dbSetDataMappings

Set data mappings between an DBMS and R.
dbRemoveTable

Remove a table from the database
dbSendQuery

Execute a query on a given database connection
sqlInterpolate

Safely interpolate values into an SQL string
hidden_aliases

Internal page for hidden aliases
rownames

Convert row names back and forth between columns
sqlCreateTable

Compose query to create a simple table
sqlCommentSpec

Parse interpolated variables from SQL.
make.db.names.default

Make R identifiers into legal SQL identifiers
sqlAppendTable

Compose query to insert rows into a table
dbBegin

Begin/commit/rollback SQL transactions
sqlData

Convert a data frame into form suitable for upload to an SQL database
DBIDriver-class

DBIDriver class
ANSI

A dummy DBI connector that simulates ANSI-SQL compliance
Id-class

Refer to a table nested in a hierarchy (e.g. within a schema)
DBIResult-class

DBIResult class
DBIConnection-class

DBIConnection class
DBIConnector-class

DBIConnector class
DBIObject-class

DBIObject class
SQL

SQL quoting
DBIResultArrow-class

DBIResultArrow class
DBI-package

DBI: R Database Interface