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)
<MySQLDriver:(23864)>
Driver name: MySQL
Max connections: 16
Conn. processed: 3
Default records per fetch: 500
DBI API version:
# MySQL連接實例信息
> summary(conn, verbose = TRUE)
<MySQLConnection:(23864,2)>
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]]
<MySQLConnection:(23864,2)>
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下面修正字符編號的問題。