1. 配置ODBC数据源
本文以MySQL数据库为例进行连接,其它数据库连接方式大同小异
(1)下载 mysql ODBC
(2)添加数据源
打开【控制面板】-【管理工具】-【ODBC数据源】,并点击添加
(3)选择驱动
选中MySQL ODBC 5.3 ANSI Driver并点击完成,因为这个驱动比Unicode驱动提供更多字符集的支持
(4)配置ODBC
至此,ODBC数据源的配置工作就完成了。接下来是利用R软件的RODBC包连接MySQL数据库,并进行相关操作。
2. R与数据库连接
(1)下载并加载RODBC包
> install.packages("RODBC")
package ‘RODBC’ successfully unpacked and MD5 sums checked
> library(RODBC)
(2)创建连接
> channel<-odbcConnect(dsn, uid = "", pwd = "", ...)
三个参数分别对应“数据源名称”,“数据库用户名”,“数据库密码”
(3)进行数据库操作
方式一:RODBC自带函数
- sqlSave():将R数据框复制到数据库表中
sqlSave(channel, dat, tablename = NULL,append = FALSE,
rownames = TRUE, colnames = FALSE, verbose = FALSE,
safer = TRUE, addPK = FALSE, typeInfo, varTypes,
fast = TRUE, test = FALSE, nastring = NULL)
其中dat是要复制的R中的数据框,tablename则是数据库中的目标表若不写tablename,则该函数会在数据库里新建一个dat表,否则按tablename新建或者更新数据库表。
rownames决定是否将行名用一列存储起来,colnames决定是否用一行将行名存储起来。
append决定是否以追加的方式更新,而verbose决定是否在R中打印操作信息(强烈建议使用该属性)
- sqlFetch():将数据库中的表复制到R的数据框中
sqlFetch(channel, sqtable, ..., colnames = FALSE, rownames = TRUE)
函数将数据库中的sqtable表以数据框的形式返回
- sqlQuery():在数据库环境下执行sql语句
sqlQuery(channel, query, errors = TRUE, ..., rows_at_time)
注意:使用SqlSave函数像数据库插入数据时,列名全为小写(即使数据框列名为大写),因此需要数据库中的表的列名也全为小写,否则会插入失败——目前还不好解决~~~
方式二:结合sqldf包
> install.packages("sqldf")
> library(sqldf)
> sqldf(x,verbose)
更多的sqldf参数还请自行使用 ? sqldf
进行 查看
sqldf与sqlQuery不同之处在于,它是在R的环境中搜索并执行sql语句,因此需要先使用RODBC将所需的表环境从数据中提取出来。
(4)关闭开启连接
> close(channel) #关闭指定连接
> open(channel) #开启指定连接