安裝部署(十) Ubuntu下安裝R和RMySQL驅動

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後,
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下面修正字符編號的問題。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章