您的位置:首页 > 数据库

R语言连接SQL数据库的两种方式配置过程记录

2015-11-04 23:28 459 查看
不是一切大树,都被暴风折断;不是一切种子,都找不到生根的土壤;不是一切真情,都流失在人心的沙漠里;不是一切梦想,都甘愿被折掉翅膀。

不是一切火焰,都只燃烧自己,而不把别人照亮;不是一切星星,都仅指示黑夜,而不报告曙光;不是一切歌声,都掠过耳旁,而不留在心上。

——舒婷《这也是一切》

R,数据库的安装与配置在此文中不再赘述

R连接SQL数据库的方法有许多种(基于不同的packages),例如RMySQL, RSQLite等是基于DBI方式连接数据库,也可以用RODBC方式来连接。

首先我为了测试是否能连接成功,我需要建一个数据库,本文CentOS 6.7环境,采用SQLite,首先在/home/emptyset/sqlite目录下建立一个新数据库
test.db


$ sqlite3 /home/emptyset/sqlite/test.db


于是进入了sqlite3命令行,接下去建立一张测试表,插入一行数据

sqlite> CREATE TABLE dt_user (
...> id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
...> account CHAR(20) NOT NULL,
...> name CHAR(10) NOT NULL
...> );
sqlite> .tables
dt_user
sqlite> INSERT INTO dt_user (account,name) VALUES ('21324784@qq.com','Wen Gu');
sqlite> SELECT * FROM dt_user;
1|21324784@qq.com|Wen Gu


嗯,现在数据已经插入成功了。

1 DBI方式连接数据库

接下去我们直接打开R语言命令行,在命令行下,我们需要安装RSQLite包——

install.packages('RSQLite')


注意这里的
RSQLite
是大小写敏感的,然后它会提示你选择下载的镜像,在这里选择镜像的时候,有些镜像可能会连不上……自己多找几个试试,我最后是在http mirrors里头选择20找了个国内的节点,总算是安装成功了。

> library(RSQLite)
Loading required package: DBI
> conn <- dbConnect(dbDriver("SQLite"), dbname="/home/emptyset/sqlite/test.db");
> dbListTables(conn)    #查看tables
[1] "dt_user"         "sqlite_sequence" "sqlite_stat1"
> dbListFields(conn, 'dt_user')    #查看dt_user表的字段名
[1] "id"      "account" "name"
> user <- dbGetQuery(conn, "SELECT * FROM dt_user WHERE id>0")
> user
id         account   name
1  1 21324784@qq.com Wen Gu


DBI方式连接成功啦~同理可以用RMySQL等等其他包来连接相应数据库

2 RODBC连接数据库

> install.packages('RODBC')    #安装RODBC包


结果出错了!提示

In install.packages("RODBC") :
installation of package ‘RODBC’ had non-zero exit status


原因是没有安装unixODBC,在CentOS下可以通过yum安装

yum install unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel


安装完以后重新进入R成功安装RODBC。随后我们需要为不同的数据库安装不同的ODBC驱动,以SQLite为例,这里就遇到了不少的坑,首先是国内的墙导致SQLite的ODBC很难下载,实在不行的考虑翻墙

wget http://www.ch-werner.de/sqliteodbc/sqliteodbc-0.9992.tar.gz  #下载sqliteODBC驱动包
tar xvfz sqliteodbc-0.9992.tar.gz    #解压
cd sqliteodbc-0.9992.tar.gz    #进入目录
./configure


结果……出错了,提示
No usable SQLite header/library on this system
,一番google后知道原来是没有装sqlite-devel,不难解决,可以用yum安装

yum install sqlite-devel


随后继续刚才的编译工作——

./configure
make
sudo make install


好了,至此软件已经装完了。接下去要对ODBC进行一下配置,对于SQLiteODBC的配置说明,我们可以在这里找到

http://ch-werner.de/sqliteodbc/html/index.html

第一步:将驱动添加到配置文件

ODBC的配置文件在
/etc/odbcinst.ini
,vim打开它

vim /etc/odbcinst.ini


在文件尾部加上

[SQLite]
Description=SQLite ODBC Driver
Driver=/usr/local/lib/libsqlite3odbc.so
Setup=/usr/local/lib/libsqlite3odbc.so
Threading=2


第二步:配置DSN数据源

vim ~/.odbc.ini


注意,方括号里的
mysqlitedb
就是数据源的名字,待会儿用它就可以连接到下面对应的/home/emptyset/sqlite/test.db

[mysqlitedb]
Description=My SQLite test database
Driver=SQLite
Database=/home/emptyset/sqlite/test.db
# optional lock timeout in milliseconds
Timeout=2000


——至此SQLite的ODBC已经配置完了,测试一下:

isql mysqlitedb
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+


连接成功。让我们进入R试一下吧

> library(RODBC)
> conn <- odbcConnect("mysqlitedb")
> result <- sqlQuery(conn, "SELECT * FROM dt_user")
> result
id         account     name
1  1 21324784@qq.com   Wen Gu


搞定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  r语言 ODBC SQLite