đ Introduction
Database connectivity allows R applications to communicate with relational and non-relational databases for storing, retrieving, updating, and managing data. Instead of loading data from files, R can directly connect to databases, execute SQL queries, and perform data analysis on large datasets efficiently.
Information
đ¯ Why Learn Database Connectivity?
- Access large datasets directly from databases.
- Perform efficient data analysis without importing entire datasets.
- Integrate R with enterprise applications.
- Automate reporting and data processing workflows.
- Manage data using SQL from within R.
đ Database Connectivity Workflow
đĻ Installing Database Packages
Install Required Packages
install.packages("DBI")
install.packages("RSQLite")
install.packages("RPostgres")
install.packages("RMariaDB")
install.packages("odbc")
library(DBI)đ Common Database Drivers
| Package | Database |
|---|---|
| RSQLite | SQLite |
| RPostgres | PostgreSQL |
| RMariaDB | MariaDB and MySQL |
| odbc | ODBC-compatible databases |
| duckdb | DuckDB |
đ Connecting to SQLite
SQLite stores the entire database in a single file, making it ideal for local applications and demonstrations.
SQLite Connection
library(DBI)
library(RSQLite)
con <- dbConnect(
SQLite(),
"students.db"
)đ Connecting to PostgreSQL
PostgreSQL Connection
library(DBI)
library(RPostgres)
con <- dbConnect(
Postgres(),
dbname = "school",
host = "localhost",
port = 5432,
user = "postgres",
password = "password"
)đĸ Connecting to MySQL or MariaDB
MariaDB Connection
library(DBI)
library(RMariaDB)
con <- dbConnect(
MariaDB(),
dbname = "school",
host = "localhost",
user = "root",
password = "password"
)đ Connecting Using ODBC
ODBC provides a common interface for connecting to many commercial database systems.
ODBC Connection
library(DBI)
library(odbc)
con <- dbConnect(
odbc(),
Driver = "PostgreSQL",
Server = "localhost",
Database = "school",
UID = "postgres",
PWD = "password",
Port = 5432
)đ Listing Database Tables
View Available Tables
dbListTables(
con
)đ Reading Data
SQL queries can be executed directly using dbGetQuery().
Retrieve Data
students <- dbGetQuery(
con,
"SELECT * FROM Students"
)
print(students)â Creating a Table
Create Table
dbExecute(
con,
"CREATE TABLE Students (
ID INTEGER,
Name TEXT,
Marks INTEGER
)"
)â Inserting Records
Insert Data
dbExecute(
con,
"INSERT INTO Students
VALUES
(1, 'Alice', 90)"
)đ Updating Records
Update Data
dbExecute(
con,
"UPDATE Students
SET Marks = 95
WHERE ID = 1"
)â Deleting Records
Delete Data
dbExecute(
con,
"DELETE FROM Students
WHERE ID = 1"
)đĨ Writing a Data Frame to a Database
The dbWriteTable() function stores an R data frame as a database table.
Write Data Frame
studentData <- data.frame(
ID = c(
1,
2
),
Name = c(
"Alice",
"Bob"
),
Marks = c(
90,
85
)
)
dbWriteTable(
con,
"Students",
studentData,
overwrite = TRUE
)đ¤ Reading an Entire Table
Read Table
students <- dbReadTable(
con,
"Students"
)
head(students)đ Using SQL with dplyr
The dplyr package can interact with databases using familiar data manipulation verbs.
Database with dplyr
library(dplyr)
students <- tbl(
con,
"Students"
)
students %>%
filter(
Marks > 80
) %>%
select(
Name,
Marks
)đ Using Transactions
Transactions ensure that multiple database operations either all succeed or all fail together.
Transaction Example
dbBegin(con)
dbExecute(
con,
"INSERT INTO Students
VALUES (3, 'Charlie', 88)"
)
dbCommit(con)đ Parameterized Queries
Parameterized queries help prevent SQL injection by separating SQL statements from user-supplied values.
Parameterized Query
dbGetQuery(
con,
"SELECT * FROM Students
WHERE Marks > ?",
params = list(80)
)đ Closing the Connection
Always close database connections after completing your work.
Disconnect
dbDisconnect(
con
)đ Common DBI Functions
| Function | Purpose |
|---|---|
| dbConnect() | Creates a database connection. |
| dbDisconnect() | Closes a database connection. |
| dbGetQuery() | Executes a query and returns a data frame. |
| dbExecute() | Executes SQL statements without returning rows. |
| dbReadTable() | Reads an entire table. |
| dbWriteTable() | Writes a data frame to a table. |
| dbListTables() | Lists available tables. |
| dbBegin() | Starts a transaction. |
| dbCommit() | Commits a transaction. |
| dbRollback() | Rolls back a transaction. |
đ Real-World Example
A university stores student records in a PostgreSQL database. An R application connects to the database, retrieves student performance data, performs statistical analysis, generates visualizations, and writes summary reports back to the database for administrators.
Student Performance Analysis
library(DBI)
library(RPostgres)
con <- dbConnect(
Postgres(),
dbname = "university",
host = "localhost",
user = "postgres",
password = "password"
)
students <- dbGetQuery(
con,
"SELECT Name,
Marks
FROM Students"
)
summary(
students$Marks
)
dbDisconnect(
con
)đ Database Connectivity Workflow
â ī¸ Common Mistakes
| Mistake | Explanation | Solution |
|---|---|---|
| Leaving database connections open | Consumes database resources. | Always call dbDisconnect() when finished. |
| Embedding user input directly in SQL | Creates SQL injection vulnerabilities. | Use parameterized queries with query parameters. |
| Ignoring transaction handling | Partial updates can leave data inconsistent. | Use transactions for multiple related operations. |
| Reading unnecessarily large datasets | Increases memory usage and slows performance. | Retrieve only the required rows and columns using SQL. |
đĄ Best Practices
- Use the DBI interface for portable database code.
- Always close database connections after use.
- Retrieve only the necessary data with efficient SQL queries.
- Use parameterized queries to improve security.
- Wrap related updates inside database transactions.
- Use database indexes and optimized SQL for better performance.
- Store sensitive connection credentials securely instead of hardcoding them.
Best Practice
đ Summary
Database connectivity allows R to interact directly with relational databases for efficient data storage, retrieval, and analysis. In this chapter, you learned how to connect to SQLite, PostgreSQL, MariaDB, MySQL, and ODBC-compatible databases using the DBI interface. You explored creating connections, executing SQL queries, reading and writing tables, performing updates, managing transactions, using parameterized queries, integrating databases with dplyr, and safely closing connections. Mastering database connectivity enables you to build robust, secure, and scalable data-driven applications using R.