R语言操作数据库

以下内容出自http://www.douban.com/note/172387172/

 

CRAN上有很多R的数据库支持包,使R能够对数据库进行读写操作。这些包有:RODBC、DBI、RMySQL、ROracle,、RPostgreSQL、RSQLite、 RJDBC 、RpgSQL等等,支持几乎市面上所有的数据库系统。实现的技术也包括ODBC和JDBC两大方面。其中RJDBC和RpgSQL(基于JDBC)都需要Java的支持。

       因为选择很多,所以R操作数据库的方式也很灵活,我本人的电脑系统是64位,情况稍微特殊一点,所以这篇文章会以64位的工作环境下的操作为主。事实上32位的环境更加成熟,选择更多。

       首先,介绍工作环境:
         数据库:PostgreSQL v8.4以上(本例中数据库版本为9.0版)
         选择这个数据库的原因,一是因为个人的爱好,2是R文档中的例子几乎清一色的是MySQL,烂 大街了的数据库再多讲就没太大意义。加上这个数据库因为不像MySQL和Oracle那样使用广泛(其实这个数据库使用以及很普及了),所以可以作为一个一般性的例子来参考。
         操作系统:Windows 7 SP1 x64
         其实在Linux上讲这个更有代表性,因为R的原生系统是Linux,并且Linux平台的ODBC和JDBC的配置和Windows系统比相对要复杂一点,但是我的机器上没有Linux,所以只能等以后有机会再补上这一部分的内容。这一回就以Windows系统为主。
         使用的R软件包:RODBC
         本来想使用RpgSQL包的,无奈64位系统下,不管我如何调整,R怎么都不认我的64位的JDK,RPostgreSQL包又不支持新版本的R。无奈,只好用RODBC

       下面介绍主要内容:
       第一步: 创建测试用的数据库和数据表
       数据库名就直接用Postgre的默认数据库“postgre”,数据表起名soybean1(工作后遗症,工作用的数据不方便透露,就自己随便填了两个数据上去了),如下图:



       第二步:配置ODBC数据源
       Windows下的ODBC配置比较简单。打开“控制面板”,进入“管理工具”菜单,选择“数据源(ODBC)”会出现如下窗口:

其中“PostgreSQL35W”就是PostgreSQL数据库ODBC驱动的名称,倘若没有此项,请先安装PostgreSQL的ODBC驱动(下载地址:http://www.postgresql.org/ftp/odbc/versions/msi/)。安装完成后点击上图界面中的“添加”按钮,选择PostgreSQL的驱动即可。然后再点选上图界面中的“配置”按钮,弹出以下界面:
 


其中,Database填写对应的数据库名称,本例中为“postgres”。Server填写数据库系统的url地址,如果是在本机运行的数据库系统,一般可填“localhost”,本例中即是如此。Port处填写数据库系统的访问端口,不同的数据库一般不同,PostgreSQL的默认端口是“5432”。User Name和Password处分别填写访问数据库用的用户名和密码。所有这些填完后数据源的配置就基本完成了。

       第三步:R中建立数据库连接
       本例中使用RStudio作为R的IDE环境,主要是为了操作方便。首先载入RODBC包,然后使用odbcDataSources()函数查看可用的数据源。发现PostgreSQL的数据源名称为“PostgreSQL35W”,记住这个名称。然后建立数据库的连接,使用的命令行如下:
conn=odbcConnect("PostgreSQL35W",uid="postgres",pwd="m4a1",case="tolower")
其中,第一个参数就是刚才odbcDataSources()函数列出的PostgreSQL数据源的名称,uid为用户名
pwd为密码,case参数表示大小写转换,因为Windows默认将字符转换为小写。至此如果不出任何错误的话,就代表连接建立成功,之后就可以进行对数据库的查询或者将处理好的数据框以数据表的形式存入数据库操作。本例中仅给出查询的样例,其他操作请参考RODBC的帮助文档。

 



       通常来说,数据库连接的创建是个难点,经常会出现的错误有:参数不正确,比如用户名密码不正确或者数据源名称错误。ODBC驱动失效也可能引起连接建立错误,这种情况一般在配置ODBC数据源的时候就会出现错误,出现这种情况,一般可以通过重新安装ODBC驱动来解决问题。

       另外,在32位环境下,RpgSQL借助JDBC也可以实现对数据库的灵活访问,不过我在自己的笔记本上(本子用的32位系统)测试这个包,发现其对Unicode的支持似乎不是太好,数据表的中文表头在读取后会变成乱码,目前暂时没有找到解决方案。

 

更多内容,请参考http://cran.r-project.org/doc/manuals/R-data.pdf

posted @ 2014-07-08 14:33  kongmeng  阅读(2348)  评论(0编辑  收藏  举报