要连接到SQLite数据库,它相当简单:您将驱动程序和路径传递给SQLite文件。
对于其他DBI
兼容的数据库后端(PostgreSQL,MySQL等),您可以传递给dbConnect
的内容并不明显,也没有详细记录。
如何找到我可以传递给dbConnect
以形成连接的内容?
答案 0 :(得分:13)
可用的参数取决于后端,这就是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"
获取相应后端的方法,名称中包含Driver
。
getMethod(dbConnect, "PostgreSQLDriver")
# The 'Method Definition' section of the output
## function (drv, ...)
## postgresqlNewConnection(drv, ...)
可用的参数是在前一个方法定义中调用的函数的参数。
args(postgresqlNewConnection)
## function (drv, user = "", password = "", host = "", dbname = "",
## port = "", tty = "", options = "", forceISOdate = TRUE)
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 (...)
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, ...
# Oracle
args(.oci.Connect)
## function(drv, username = "", password = "", dbname = "", prefetch = FALSE,
## bulk_read = 1000L, stmt_cache = 0L, external_credentials = FALSE,
## sysdba = FALSE)
RJDBC
的工作方式略有不同。而不是调用另一个子函数,它的dbConnect
方法接受额外的命名args。
formalArgs(getMethod(dbConnect, "JDBCDriver"))
## [1] "drv" "url" "user" "password" "..."