2014-09-30 18 views
6

Um eine Verbindung mit einer SQLite-Datenbank herzustellen, ist es relativ einfach: Sie übergeben einen Treiber und einen Pfad an die SQLite-Datei.Welche Argumente kann ich an dbConnect übergeben?

Für andere DBI -kompatible Datenbank-Backends (PostgreSQL, MySQL, etc.), was Sie dbConnect passieren kann, ist nicht auf der Hand, noch gut dokumentiert.

Wie finde ich heraus, was ich an dbConnect weitergeben kann, um die Verbindung zu bilden?

Antwort

12

Die verfügbaren Argumente hängen vom Backend ab, weshalb dbConnect nur Treiber und ... Argumente anzeigt.

Bevor Sie fortfahren, laden Sie die für die Datenbankverbindung erforderlichen Pakete (RSQLite, RPostgreSQL, RMySQL oder was auch immer).


Um den Namen des Fahrers

Dies soll das gleiche sein wie der Name des Datenbank-Backend zu finden. Derzeit unterstützte Werte umfassen "SQLite", "PostgreSQL", "MySQL", "Oracle", "JDBC".

Die Zeichenfolge muss immer der Name einer Funktion im DB-Paket sein. Wenn Sie also im Zweifelsfall das Paket durchsuchen (z. B. ls("package:RSQLite")), raten Sie auf Namen, die plausibel erscheinen.


Für die ... args

Sie können die Methoden zur Verfügung, für den Anschluss siehe showMethods verwenden.

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

die Methode für die entsprechende Backend holen mit Driver im Namen.

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

Die verfügbaren Argumente sind diejenigen der Funktion, die innerhalb der vorherigen Methodendefinition aufgerufen wird.

?postgresqlNewConnection

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

SQLite und MySQL Aufruf lokal definierten Funktionen, die ein bisschen nervig sind programmatisch zuzugreifen.

?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 etwas anders funktioniert. Anstatt eine andere Unterfunktion aufzurufen, akzeptiert die Methode dbConnect zusätzliche benannte Argumente.

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

Leider scheinen Links zu r-inside.org tot zu sein. Außerdem kann ich weder 'sqliteNewConnection' noch' mysqlNewConnection' finden (seit v0.10 nicht mehr exportiert https://github.com/r-dbi/RMySQL/blob/7c3ba1dc8bd59ba972350401f4c421b12da03253/NEWS.md#version-010) –

Verwandte Themen