4 Introduction to DBI
4.1 Local database basics
Connecting and adding data to a database
Load the
DBI
packageUse
dbConnect
to open a database connectionUse
dbListTables()
to view existing tables, there should be 0 tables## character(0)
Use
dbWriteTable()
to create a new table usingmtcars
data. Name it db_mtcarsUse
dbListTables()
to view existing tables, it should return db_mtcars## [1] "db_mtcars"
Use
dbGetQuery()
to pass a SQL query to the database## 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 ## 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 ## 11 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 ## 12 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 ## 13 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 ## 14 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 ## 15 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 ## 16 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 ## 17 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 ## 18 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 ## 19 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 ## 20 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 ## 21 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 ## 22 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 ## 23 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 ## 24 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 ## 25 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 ## 26 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 ## 27 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 ## 28 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 ## 29 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 ## 30 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 ## 31 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 ## 32 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
Close the database connection using
dbDisconnect()
4.2 Options for writing tables
Understand how certain arguments in dbWriteTable()
work
Use
dbConnect()
to open a Database connection againUse
dbWriteTable()
to re-create the db_mtcars table usingmtcars
dataError: Table db_mtcars exists in database, and both overwrite and append are FALSE
Use the
append
argument indbWriteTable()
to add to the data in the db_mtcars tableUsing
dbGetQuery()
, check the current record count of db_mtcars with the following query: “select count() from db_mtcars”## count() ## 1 64
Use the
overwrite
argument todbWriteTable()
to replace the data in the db_mtcars tableCheck the record count of
db_mtcars
again## count() ## 1 32
4.3 Database operations
Understand how to use dbSendStatement()
and dbExecute()
to modify the database
Use
dbSendStatement()
to pass a SQL commands that deletes any automatic car fromdb_mtcars
: “delete from db_mtcars where am = 1”. Load the command to a variable calledrs
Call the
rs
variable to view information about the results of the requested change## <SQLiteResult> ## SQL delete from db_mtcars where am = 1 ## ROWS Fetched: 0 [complete] ## Changed: 13
Use
dbHasCompleted()
to confirm that the job is complete## [1] TRUE
Use
dbGetRowsAffected()
to see the number of rows that were affected by the request## [1] 13
Clear the results using
dbClearResult()
Confirm that the result set has been removed by calling the
rs
variable once more## <SQLiteResult> ## EXPIRED
Check the record count of db_mtcars again, the new count should be 19 (32 original records - 13 deleted records)
## count() ## 1 19
Use
dbWriteTable()
to overwrite db_mtcars with the value ofmtcars
Use
dbExeceute()
to delete rows where am = 1 using the same query as before. Load the results in a variable calledrs
rs
contains the number of rows affected by the satement that was executed## [1] 13
Check the record count of db_mtcars again.
## count() ## 1 19
4.4 knitr
SQL engine
See how to run SQL queries as code chunks
Start a new code chunk, but using
sql
instead ofr
as the first argument of the chunk. Also addconnection=con
as another argument of the chunk.{sql, connection=con} select * from db_mtcars
mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb |
---|---|---|---|---|---|---|---|---|---|---|
21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
18.7 | 8 | 360.0 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
18.1 | 6 | 225.0 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 |
14.3 | 8 | 360.0 | 245 | 3.21 | 3.570 | 15.84 | 0 | 0 | 3 | 4 |
24.4 | 4 | 146.7 | 62 | 3.69 | 3.190 | 20.00 | 1 | 0 | 4 | 2 |
Add the
max.print
options to the chunk, and set it to 5{sql, connection=con, max.print = 5} select * from db_mtcars
mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb |
---|---|---|---|---|---|---|---|---|---|---|
21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
18.7 | 8 | 360.0 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
18.1 | 6 | 225.0 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 |
14.3 | 8 | 360.0 | 245 | 3.21 | 3.570 | 15.84 | 0 | 0 | 3 | 4 |
24.4 | 4 | 146.7 | 62 | 3.69 | 3.190 | 20.00 | 1 | 0 | 4 | 2 |
Set defaults for the
sql
chunks by using theknitr::opts_chunk$set()
command in thesetup
at the beginning of the document.{r setup} knitr::opts_chunk$set(connection = "con", max.print = 5)
Run the same query in a new
sql
chunk, but without any other argumentselect * from db_mtcars
mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb |
---|---|---|---|---|---|---|---|---|---|---|
21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
18.7 | 8 | 360.0 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
18.1 | 6 | 225.0 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 |
14.3 | 8 | 360.0 | 245 | 3.21 | 3.570 | 15.84 | 0 | 0 | 3 | 4 |
24.4 | 4 | 146.7 | 62 | 3.69 | 3.190 | 20.00 | 1 | 0 | 4 | 2 |
- Store the results of the query into an R object called
local_mtcars
using theoutput.var
option.
## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## 2 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## 3 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## 4 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## 5 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## 6 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## 7 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## 8 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## 9 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## 10 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## 11 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## 12 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## 13 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## 14 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## 15 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## 16 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## 17 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## 18 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## 19 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
- Close the database connection using
dbDisconnect()