R语言连接SQL数据库的两种方式配置过程记录
2015-11-04 23:28
459 查看
不是一切大树,都被暴风折断;不是一切种子,都找不到生根的土壤;不是一切真情,都流失在人心的沙漠里;不是一切梦想,都甘愿被折掉翅膀。
不是一切火焰,都只燃烧自己,而不把别人照亮;不是一切星星,都仅指示黑夜,而不报告曙光;不是一切歌声,都掠过耳旁,而不留在心上。
——舒婷《这也是一切》
R,数据库的安装与配置在此文中不再赘述
R连接SQL数据库的方法有许多种(基于不同的packages),例如RMySQL, RSQLite等是基于DBI方式连接数据库,也可以用RODBC方式来连接。
首先我为了测试是否能连接成功,我需要建一个数据库,本文CentOS 6.7环境,采用SQLite,首先在/home/emptyset/sqlite目录下建立一个新数据库
于是进入了sqlite3命令行,接下去建立一张测试表,插入一行数据
嗯,现在数据已经插入成功了。
注意这里的
DBI方式连接成功啦~同理可以用RMySQL等等其他包来连接相应数据库
结果出错了!提示
原因是没有安装unixODBC,在CentOS下可以通过yum安装
安装完以后重新进入R成功安装RODBC。随后我们需要为不同的数据库安装不同的ODBC驱动,以SQLite为例,这里就遇到了不少的坑,首先是国内的墙导致SQLite的ODBC很难下载,实在不行的考虑翻墙
结果……出错了,提示
随后继续刚才的编译工作——
好了,至此软件已经装完了。接下去要对ODBC进行一下配置,对于SQLiteODBC的配置说明,我们可以在这里找到
http://ch-werner.de/sqliteodbc/html/index.html
第一步:将驱动添加到配置文件
ODBC的配置文件在
在文件尾部加上
第二步:配置DSN数据源
注意,方括号里的
——至此SQLite的ODBC已经配置完了,测试一下:
连接成功。让我们进入R试一下吧
搞定。
不是一切火焰,都只燃烧自己,而不把别人照亮;不是一切星星,都仅指示黑夜,而不报告曙光;不是一切歌声,都掠过耳旁,而不留在心上。
——舒婷《这也是一切》
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
搞定。
相关文章推荐
- SQLite教程(十一):临时文件
- SQLite中重置自动编号列的方法
- 保护你的Sqlite数据库(SQLite数据库安全秘籍)
- SQLite教程(十):内存数据库和临时数据库
- SQLite 入门教程二 SQLite的创建、修改、删除表
- OLEDB和ODBC的区别(优缺点)
- 详解SQLite中的数据类型
- 详解SQLite中的查询规划器
- C#封装的Sqlite访问类实例
- 总提示[Microsoft][ODBC Excel Driver] 数值字段溢出官方解决方法
- SQLite中的B-Tree实现细节分析
- SQLite 中文指南之FAQ第1/6页
- SQLite 内存数据库学习手册
- SQLite中的WAL机制详细介绍
- Sqlite数据库里插入数据的条数上限是500
- SQLite速度评测代码
- ADO,OLEDB,ODBC,DAO,RDO的区别说明
- 简单分析SQLite4的一些设计改变
- C++操作SQLite简明教程
- C#实现Excel导入sqlite的方法