What arguments can I pass to dbConnect?

微笑、不失礼 提交于 2020-01-10 19:34:28

问题


To connect to a SQLite database, it is reasonably straightforward: you pass a driver and a path to the SQLite file.

For other DBI-compatible database backends (PostgreSQL, MySQL, etc.), what you can pass to dbConnect isn't obvious, nor well documented.

How do I find out what I can pass to dbConnect to form the connection?


回答1:


The arguments available depend upon the backend, which is why dbConnect only shows driver and ... arguments.

Before we proceed, load the packages required for the database connection (RSQLite, RPostgreSQL, RMySQL or whatever).


To find the name of the driver

This should be the same as the name of the database backend. Currently supported values include "SQLite", "PostgreSQL", "MySQL", "Oracle", "JDBC".

The string must always be the name of a function in the DB package, so if in doubt search through the package (use, for example, ls("package:RSQLite")) and guess at names that look plausible.


To find the ... args

You can see the methods available for connection using showMethods.

showMethods("dbConnect")
## Function: dbConnect (package DBI)
## drv="character"
## drv="PostgreSQLConnection"
## drv="PostgreSQLDriver"
## drv="SQLiteConnection"
## drv="SQLiteDriver"

Get the method for the appropriate backend, with Driver in the name.

getMethod(dbConnect, "PostgreSQLDriver")
# The 'Method Definition' section of the output
## function (drv, ...) 
## postgresqlNewConnection(drv, ...)

The available arguments are are those of the function that is called inside the previous method definition.

?postgresqlNewConnection

args(postgresqlNewConnection)
## function (drv, user = "", password = "", host = "", dbname = "", 
##     port = "", tty = "", options = "", forceISOdate = TRUE) 

SQLite and MySQL call locally defined functions, which are a bit of a pain to access programmatically.

?SQLite

args(body(getMethod("dbConnect", "SQLiteDriver"))[[2]][[3]])
## function (drv, dbname = "", ..., loadable.extensions = TRUE, 
## cache_size = NULL, synchronous = "off", flags = SQLITE_RWC, 
## vfs = NULL) 
## function (...)

?MySQL

args(body(getMethod("dbConnect", "MySQLDriver"))[[2]][[3]])
## function (drv, dbname = NULL, username = NULL, password = NULL, 
## host = NULL, unix.socket = NULL, port = 0, client.flag = 0, 
## groups = "rs-dbi", default.file = NULL, ...

?OraSupport

# Oracle
args(.oci.Connect)
## function(drv, username = "", password = "", dbname = "", prefetch = FALSE, 
##     bulk_read = 1000L, stmt_cache = 0L, external_credentials = FALSE, 
##     sysdba = FALSE)

RJDBC works slightly differently. Rather than calling another subfunction, its dbConnect method accepts additional named args.

formalArgs(getMethod(dbConnect, "JDBCDriver"))
## [1] "drv"      "url"      "user"     "password" "..."


来源:https://stackoverflow.com/questions/26119142/what-arguments-can-i-pass-to-dbconnect

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!