Ric*_*ton 8 database-connection r
要连接到SQLite数据库,它是相当简单的:您传递驱动程序和SQLite文件的路径.
对于其他DBI兼容的数据库后端(PostgreSQL,MySQL等),您可以传递的dbConnect内容并不明显,也没有详细记录.
如何找出可以传递dbConnect给构建连接的内容?
Ric*_*ton 14
可用的参数取决于后端,这就是为什么dbConnect只显示驱动程序和...参数.
在我们开始之前,加载数据库连接(所需的软件包RSQLite,RPostgreSQL,RMySQL或其他).
找到驱动程序的名称
这应该与数据库后端的名称相同.当前支持的值包括
"SQLite","PostgreSQL","MySQL","Oracle","JDBC".
字符串必须始终是数据库包中函数的名称,因此如果有疑问,请搜索包(例如,使用ls("package:RSQLite"))并猜测看似合理的名称.
找到... args
您可以看到可用于连接的方法showMethods.
showMethods("dbConnect")
## Function: dbConnect (package DBI)
## drv="character"
## drv="PostgreSQLConnection"
## drv="PostgreSQLDriver"
## drv="SQLiteConnection"
## drv="SQLiteDriver"
Run Code Online (Sandbox Code Playgroud)
Driver在名称中获取适当后端的方法.
getMethod(dbConnect, "PostgreSQLDriver")
# The 'Method Definition' section of the output
## function (drv, ...)
## postgresqlNewConnection(drv, ...)
Run Code Online (Sandbox Code Playgroud)
可用的参数是在前一个方法定义中调用的函数的参数.
args(postgresqlNewConnection)
## function (drv, user = "", password = "", host = "", dbname = "",
## port = "", tty = "", options = "", forceISOdate = TRUE)
Run Code Online (Sandbox Code Playgroud)
SQLite和MySQL调用本地定义的函数,这是以编程方式访问的一点点痛苦.
args(body(getMethod("dbConnect", "SQLiteDriver"))[[2]][[3]])
## function (drv, dbname = "", ..., loadable.extensions = TRUE,
## cache_size = NULL, synchronous = "off", flags = SQLITE_RWC,
## vfs = NULL)
## function (...)
Run Code Online (Sandbox Code Playgroud)
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, ...
Run Code Online (Sandbox Code Playgroud)
# Oracle
args(.oci.Connect)
## function(drv, username = "", password = "", dbname = "", prefetch = FALSE,
## bulk_read = 1000L, stmt_cache = 0L, external_credentials = FALSE,
## sysdba = FALSE)
Run Code Online (Sandbox Code Playgroud)
RJDBC工作略有不同.它的dbConnect方法不是调用另一个子函数,而是接受额外的命名args.
formalArgs(getMethod(dbConnect, "JDBCDriver"))
## [1] "drv" "url" "user" "password" "..."
Run Code Online (Sandbox Code Playgroud)