Ubuntu下R安装MySQL驱动
ubuntu 14.04
参考:
http://blog.fens.me/r-mysql-rmysql/
正常情况下:
install.packages("RMySQL")
如果安装不报错,
library(RMySQL)正常,就成功了。
下边说出现异常的安装:
下载依赖包:
https://cran.r-project.org/web/packages/DBI/index.html
Package source:
DBI_0.5.tar.gz
下载RMySQL包:
在https://cran.r-project.org/web/packages/RMySQL/index.html
Package source:
RMySQL_0.10.9.tar.gz
安装
root@py-11:/# R CMD INSTALL DBI_0.5.tar.gz
root@py-11:/# R CMD INSTALL RMySQL_0.10.9.tar.gz
如果没报错,命令行输入
R
进入R后,
library(RMySQL)正常,就成功了。
如果有以下报错
==================================================
downloaded 52 Kb
* installing *source* package ‘RMySQL’ ...
** 成功将‘RMySQL’程序包解包并MD5和检查
Using PKG_CFLAGS=
Using PKG_LIBS=-lmysqlclient
------------------------- ANTICONF ERROR ---------------------------
Configuration failed because libmysqlclient was not found. Try installing:
* deb: libmariadb-client-lgpl-dev (Debian, Ubuntu 16.04)
libmariadbclient-dev (Ubuntu 14.04)
* rpm: mariadb-devel | mysql-devel (Fedora, CentOS, RHEL)
* csw: mysql56_dev (Solaris)
* brew: mariadb-connector-c (OSX)
If libmysqlclient is already installed, check that 'pkg-config' is in your
PATH and PKG_CONFIG_PATH contains a libmysqlclient.pc file. If pkg-config
is unavailable you can set INCLUDE_DIR and LIB_DIR manually via:
R CMD INSTALL --configure-vars='INCLUDE_DIR=... LIB_DIR=...'
--------------------------------------------------------------------
ERROR: configuration failed for package ‘RMySQL’
* removing ‘/usr/local/lib/R/site-library/RMySQL’
下载的程序包在
‘/tmp/Rtmppi4CVK/downloaded_packages’里
警告信息:
In install.packages("RMySQL") : 安装程序包‘RMySQL’时退出狀態的值不是0
> quit()
Save workspace image? [y/n/c]: n
需要安装:
root@py-11:/projects# apt-get install libmariadbclient-dev
正在读取软件包列表... 完成
之后,重新安装RMySQL
root@py-11:/projects# R CMD INSTALL RMySQL_0.10.9.tar.gz
测试。
使用
> library(RMySQL)
DBI
MYSQL_HOME defined as D:\toolkit\mysql56
> conn <- dbConnect(MySQL(), dbname = "rmysql", username="root", password="",client.flag=CLIENT_MULTI_STATEMENTS)
> conn <- dbConnect(MySQL(), dbname = "rmysql", username="rmysql", password="rmysql",host="192.168.1.201",port=3306)
> users = dbGetQuery(conn, "SELECT * FROM t_user")
> dbDisconnect(conn)
[1] TRUE
> users
id user
1 1 A1
2 2 AB
3 3 fens.me
RMySQL函数使用
环境都安装好了,接下来我们具体使用一下RMySQL的包。
RMySQL辅助操作
RMySQL数据库操作
针对win的字符集设置
1). RMySQL辅助操作
加载类库
> library(RMySQL)
建立本地连接
> conn <- dbConnect(MySQL(), dbname = "rmysql", username="rmysql", password="rmysql",client.flag=CLIENT_MULTI_STATEMENTS)
建立远程连接
> conn <- dbConnect(MySQL(), dbname = "rmysql", username="rmysql", password="rmysql",host="192.168.1.201",port=3306)
关闭连接
dbDisconnect(conn)
查看数据库的表
> dbListTables(conn)
[1] "t_user"
查看表的字段
> dbListFields(conn, "t_user")
[1] "id" "user"
查询MySQL信息
> summary(MySQL(), verbose = TRUE)
Driver name: MySQL
Max connections: 16
Conn. processed: 3
Default records per fetch: 500
DBI API version:
# MySQL连接实例信息
> summary(conn, verbose = TRUE)
User: root
Host: localhost
Dbname: rmysql
Connection type: localhost via TCP/IP
MySQL server version: 5.6.11
MySQL client version: 5.6.11
MySQL protocol version: 10
MySQL server thread id: 35
No resultSet available
# MySQL连接信息
> dbListConnections(MySQL())
[[1]]
2). RMySQL数据库操作
RMySQL数据库操作
# 建表并插入数据
> t_demo<-data.frame(
a=seq(1:10),
b=letters[1:10],
c=rnorm(10)
)
> dbWriteTable(conn, "t_demo", t_demo)
# 获得整个表数据
> dbReadTable(conn, "t_demo")
a b c
1 1 a 0.98868164
2 2 b -0.66935770
3 3 c 0.27703638
4 4 d 1.36137156
5 5 e -0.70291017
6 6 f 1.61235088
7 7 g 0.17616068
8 8 h 0.29700017
9 9 i 0.19032719
10 10 j -0.06222173
# 插入新数据
> dbWriteTable(conn, "t_demo", t_demo, append=TRUE)
> dbReadTable(conn, "t_demo")
row_names a b c
1 1 1 a 0.98868164
2 2 2 b -0.66935770
3 3 3 c 0.27703638
4 4 4 d 1.36137156
5 5 5 e -0.70291017
6 6 6 f 1.61235088
7 7 7 g 0.17616068
8 8 8 h 0.29700017
9 9 9 i 0.19032719
10 10 10 j -0.06222173
11 1 1 a 0.98868164
12 2 2 b -0.66935770
13 3 3 c 0.27703638
14 4 4 d 1.36137156
15 5 5 e -0.70291017
16 6 6 f 1.61235088
17 7 7 g 0.17616068
18 8 8 h 0.29700017
19 9 9 i 0.19032719
20 10 10 j -0.06222173
# 覆盖原表数据
> dbWriteTable(conn, "t_demo", t_demo, overwrite=TRUE)
# 1). 查询数据
> d0 <- dbGetQuery(conn, "SELECT * FROM t_demo where c>0")
> class(d0)
[1] "data.frame"
> d0
row_names a b c
1 1 1 a 0.9886816
2 3 3 c 0.2770364
3 4 4 d 1.3613716
4 6 6 f 1.6123509
5 7 7 g 0.1761607
6 8 8 h 0.2970002
7 9 9 i 0.1903272
# 2). 执行SQL脚本查询,并分页
> rs <- dbSendQuery(conn, "SELECT * FROM t_demo where c>0")
> class(rs)
[1] "MySQLResult"
attr(,"package")
[1] "RMySQL"
> mysqlCloseResult(rs)
[1] TRUE
> d1 <- fetch(rs, n = 3)
> d1
row_names a b c
1 1 1 a 0.9886816
2 3 3 c 0.2770364
3 4 4 d 1.3613716
# 3). 查看集统计信息
> summary(rs, verbose = TRUE)
row_names a b c
Length:7 Min. :1.000 Length:7 Min. :0.1762
Class :character 1st Qu.:3.500 Class :character 1st Qu.:0.2337
Mode :character Median :6.000 Mode :character Median :0.2970
Mean :5.429 Mean :0.7004
3rd Qu.:7.500 3rd Qu.:1.1750
Max. :9.000 Max. :1.6124
# 不插入row.names字段
> dbWriteTable(conn, "t_demo", t_demo,row.names=FALSE,overwrite=TRUE)
> dbGetQuery(conn, "SELECT * FROM t_demo where c>0")
a b c
1 1 a 0.9886816
2 3 c 0.2770364
3 4 d 1.3613716
4 6 f 1.6123509
5 7 g 0.1761607
6 8 h 0.2970002
7 9 i 0.1903272
# 删除表
> if(dbExistsTable(conn,'t_demo')){
+ dbRemoveTable(conn, "t_demo")
+ }
[1] TRUE
执行SQL语句,dbSendQuery
> query<-dbSendQuery(conn, "show tables")
> data <- fetch(query, n = -1)
> data
Tables_in_rmysql
1 t_demo
2 t_user
> mysqlCloseResult(query)
[1] TRUE
4). win的字符集设置
在win7中,向MySQL插入中文
mysql> INSERT INTO t_user(user) values('小朋友'),('你好'),('正确了');
Query OK, 3 rows affected (0.07 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from t_user;
+----+---------+
| id | user |
+----+---------+
| 1 | A1 |
| 2 | AB |
| 3 | fens.me |
| 5 | 你好 |
| 4 | 小朋友 |
| 6 | 正确了 |
+----+---------+
6 rows in set (0.07 sec)
通过RMySQL查询
> dbGetQuery(conn, "SELECT * FROM t_user")
id user
1 1 A1
2 2 AB
3 3 fens.me
4 5 ??
5 4 ???
6 6 ???
设置GKB字符集
> dbDisconnect(conn)
> conn <- dbConnect(MySQL(), dbname = "rmysql", username="root", password="",client.flag=CLIENT_MULTI_STATEMENTS)
> dbSendQuery(conn,'SET NAMES gbk')
> query<-dbSendQuery(conn, "SELECT * FROM t_user")
> data <- fetch(query, n = -1)
> mysqlCloseResult(query)
[1] TRUE
> data
id user
1 1 A1
2 2 AB
3 3 fens.me
4 5 你好
5 4 小朋友
6 6 正确了
OK,我们在win下面修正字符编号的问题。