gpt4 book ai didi

r - 我可以将哪些参数传递给 dbConnect?

转载 作者:行者123 更新时间:2023-12-04 05:49:39 27 4
gpt4 key购买 nike

要连接到 SQLite 数据库,相当简单:您将驱动程序和路径传递给 SQLite 文件。

其他 DBI - 兼容的数据库后端(PostgreSQL、MySQL 等),您可以传递给 dbConnect 不明显,也没有很好的记录。

我如何找出我可以传递给 dbConnect 的内容形成联系?

最佳答案

可用的参数取决于后端,这就是为什么 dbConnect只显示驱动程序和 ...论据。

在我们继续之前,加载数据库连接所需的包( RSQLiteRPostgreSQLRMySQL 或其他)。

查找驱动程序名称

这应该与数据库后端的名称相同。当前支持的值包括"SQLite" , "PostgreSQL" , "MySQL" , "Oracle" , "JDBC" .

该字符串必须始终是 DB 包中函数的名称,因此如果有疑问,请搜索该包(例如,使用 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, ...)

可用参数是在先前方法定义中调用的函数的参数。

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

SQLite 和 MySQL 调用本地定义的函数,以编程方式访问这些函数有点麻烦。

?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工作方式略有不同。而不是调用另一个子函数,它的 dbConnect方法接受额外的命名参数。
formalArgs(getMethod(dbConnect, "JDBCDriver"))
## [1] "drv" "url" "user" "password" "..."

关于r - 我可以将哪些参数传递给 dbConnect?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26119142/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com