日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql r_R之RMySQL

發(fā)布時(shí)間:2025/3/8 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql r_R之RMySQL 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

linux,mysql和R的版本信息:

Linux naci 3.19.0-16-generic #16-Ubuntu SMP

Server version: 5.6.24-0ubuntu2 (Ubuntu)

R version 3.1.2 (2014-10-31) -- "Pumpkin Helmet"

mysql的linux安裝,參照上一篇關(guān)于liunx下安裝mysql的文章。

1. 安裝RMySQL包

在裝RMySQL包之前,確定電腦上裝了libmysqlclient-dev,否則在安裝時(shí)會(huì)出現(xiàn)錯(cuò)誤。

~$ sudo apt-get install libmysqlclient-dev #安裝客戶(hù)端的開(kāi)發(fā)支持

~$ R

> install.packages("RMySQL","/home/beili/R/packages") #安裝RMySQL包

> .libPaths(RMySQL)

2.RMySQL支持的相關(guān)函數(shù)

輔助函數(shù)

2.1 dbConnect,dbDisconnect #數(shù)據(jù)庫(kù)連接函數(shù)

2.2 dbListFields ,dbListTables,dbGetInfo,dbListResults,summary,dbGetException,dbExistsTable #查看數(shù)據(jù)庫(kù)或者參數(shù)信息

查詢(xún)函數(shù)

2.3 dbGetQuery #查詢(xún)函數(shù)

2.4 dbReadTable #讀取表的數(shù)據(jù)

更新函數(shù)

2.5 dbWriteTable #創(chuàng)建數(shù)據(jù)庫(kù)表或者將數(shù)據(jù)寫(xiě)入對(duì)應(yīng)的表

2.6 dbRemoveTable # 刪除數(shù)據(jù)庫(kù)中的表

dbSendQuery函數(shù)

2.7 dbSendQuery ,dbClearResult #將query交給數(shù)據(jù)庫(kù)引擎

2.8 dbColumnInfo,dbGetRowsAffected,dbGetRowCount,dbHasCompleted #查看數(shù)據(jù)庫(kù)引擎執(zhí)行結(jié)果

2.9 dbFetch,fetch #將dbSendQuery函數(shù)的結(jié)果抽取出來(lái)

2.10 dbNextResult,dbMoreResults #一條一條讀取結(jié)果

事務(wù)函數(shù)

2.11 dbCommit,dbBegin,dbRollback

2.1 dbConnect和dbDisconnect函數(shù)

函數(shù)調(diào)用格式如下:

dbConnect(drv, dbname,username,password ,host,port,client.flag=CLIENT_MULTI_STATEMENTS..)

dbDisconnect(conn, ...)

注:client.flag=CLIENT_MULTI_STATEMENTS表示客戶(hù)端允許執(zhí)行多個(gè)statement。

由于和傳統(tǒng)的設(shè)置參數(shù)差不多,所以下面直接看例子:

> conn=dbConnect(MySQL(),dbname="test",username="root",password="mdcl") #建立連接

> summary(conn,verbose=T) #查看連接信息

<0> User: root0>

Host: localhost

Dbname: test

Connection type: Localhost via UNIX socket

MySQL server version: 5.6.24-0ubuntu2

MySQL client version: 5.6.24

MySQL protocol version: 10

MySQL server thread id: 4

Results:

> dbDisconnect(conn) #關(guān)閉連接

注:本地連接不用設(shè)置host和port,另外summary屬于RMySQL的函數(shù),是S4類(lèi),用戶(hù)mysql驅(qū)動(dòng)的信息

2.2 dbListFields ,dbListTables,dbGetInfo,dbListResults,summary,dbGetException查看數(shù)據(jù)庫(kù)或者參數(shù)信息

函數(shù)調(diào)用格式如下:

dbListFields(conn, name, ...) #查看表的字段信息

dbListTables(conn, ...) #查看數(shù)據(jù)庫(kù)下表

dbGetInfo(dbObj, what = "", ...) #獲取mysql數(shù)據(jù)變量的信息,what指定得到list中的哪個(gè)值

dbListResults(conn, ...) #列出conn的查詢(xún)結(jié)果

summary(object, verbose = FALSE, ...)#查看某個(gè)變量的相信信息

dbGetException(conn, ...) #查看conn的異常信息

dbExistsTable(conn, name, ...)

例如:

> dbListFields(conn,"people")

[1] "name" "sex" "age"

> dbListTables(conn)

[1] "people"

> dbGetInfo(conn)

$host

[1] "localhost"

$user

[1] "root"

$dbname

[1] "test"

...

> dbListResults(conn)

list()

> dbGetException(conn)

$errorNum

[1] 0

$errorMsg

[1] ""

> dbExistsTable(conn, "people")

[1] TRUE

2.3 dbGetQuery 數(shù)據(jù)庫(kù)查詢(xún)

dbGetQuery實(shí)際要執(zhí)行一連串的動(dòng)作,在內(nèi)部實(shí)際上會(huì)執(zhí)行dbSendQuery函數(shù),然后當(dāng)dbHasCompleted為T(mén)RUE之后,又自動(dòng)fetch出返回的結(jié)果,最后由on.exit保證執(zhí)行dbClearResult。該函數(shù)支持各種各樣的query,當(dāng)執(zhí)行select操作時(shí),返回data.frame類(lèi)型的結(jié)果;當(dāng)執(zhí)行insert/update操作時(shí),返回NULL。

函數(shù)調(diào)用格式:

dbGetQuery(conn, statement, ...)

例子:

> res=dbGetQuery(conn,"select * from people")

> class(res)

[1] "data.frame"

> res

name sex age

1 bao M 12

2 qiao M 12

> dbGetQuery(conn,"show tables")

Tables_in_test

1???????? people

2??????????? stu

3??????? student

> dbGetQuery(conn,"drop table student")

NULL

> dbGetQuery(conn,"show tables")

Tables_in_test

1???????? people

2??????????? stu

2.4 dbReadTable 讀取整個(gè)表的數(shù)據(jù)

調(diào)用格式:

dbReadTable(conn, name, row.names,check.names = TRUE, ...)

其中 row.names=k,表示第k列作為每一行的名字。

例子:

> dbReadTable(conn,"stu",row.names=1)

stuid name age

1 1 qiao 51

2 2 bao 27

3 3 qiao 1

4 4 bao 26

2.5 dbWriteTable 將數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù)

調(diào)用格式:

dbWriteTable(conn, name, value, row.names=T,overwrite,append,...)

其中row.names表示是否將row.names寫(xiě)入數(shù)據(jù)庫(kù)的,作為單獨(dú)的一列;overwrite=T表示會(huì)覆蓋掉原先的數(shù)據(jù);append=T表示在原先的數(shù)據(jù)后面進(jìn)行插入。

例子:

> dbGetQuery(conn,"truncate table stu")

NULL

> dbReadTable(conn,"stu",row.names=1)

[1] stuid name age<0行>(或0-長(zhǎng)度的row.names)

> dbWriteTable(conn,"stu",student,append=T)

[1] TRUE

> dbReadTable(conn,"stu",row.names=1)

stuid name age

1 1 qiao 51

2 2 bao 27

3 3 qiao 1

4 4 bao 26

2.6 dbRemoveTable? 刪除表實(shí)際上執(zhí)行了“Drop table name”的命令,在2.3中給出了drop的例子。

調(diào)用格式:

dbRemoveTable(conn,name)

例子:

> dbListTables(conn)

[1] "people" "stu"

> dbRemoveTable(conn,"people")

[1] TRUE

> dbListTables(conn)

[1] "stu"

2.7 dbSendQuery ,dbClearResult

dbSendQuery函數(shù)提交查詢(xún),并在服務(wù)器那端同步執(zhí)行,但是并不抽取其中的結(jié)果,因此需要配合dbFetch來(lái)使用,最后抽取完畢之后,使用dbClearResult來(lái)清洗返回的結(jié)果。既然有了dbReadTable函數(shù)了,為什么還要有dbSendQuery呢?如果需要返回的數(shù)據(jù)很大的情況下,而R又裝不下,如果使用dbReadTable那么鐵定不行了。dbSendQuery函數(shù)來(lái)說(shuō),DBMS執(zhí)行了query語(yǔ)句,可能生成了大量的數(shù)據(jù),不同的數(shù)據(jù)庫(kù)驅(qū)動(dòng)可能有不同的處理方式,有的存儲(chǔ)在服務(wù)器端,一點(diǎn)一點(diǎn)發(fā)給R;有的傳給客戶(hù)端,但是不會(huì)一下子傳給R。

dbClearResult函數(shù)釋放占用的資源。

調(diào)用格式:

dbSendQuery(conn, statement)

dbClearResult(res, ...)

如果dbConnect中client.flag沒(méi)有設(shè)置下,只能執(zhí)行一條statement,而且不dbClearResult執(zhí)行的res是不能再執(zhí)行dbSendQuery函數(shù)的,也就是說(shuō)正確的執(zhí)行方式如下:

rs1=dbSendQuery(conn, statement)

...

dbClearResult(rs1, ...)

rs2=dbSendQuery(conn, statement)

...

dbClearResult(rs2, ...)

而下面的調(diào)用格式是錯(cuò)的:

rs1=dbSendQuery(conn, statement)

rs2=dbSendQuery(conn, statement)

...

dbClearResult(rs1, ...)

dbClearResult(rs2, ...)

例子:

> res=dbSendQuery(conn,"select * from stu")

> dbGetInfo(res)

$statement

[1] "select * from stu"

$isSelect

[1] 1

$rowsAffected

[1] -1

$rowCount

[1] 0

$completed

[1] 0

$fieldDescription

$fieldDescription[[1]]

NULL

> res2=dbSendQuery(conn,"select * from stu")

錯(cuò)誤于.local(conn, statement, ...) :

connection with pending rows, close resultSet before continuing

> dbClearResult(res)

[1] TRUE

> res2=dbSendQuery(conn,"select * from stu")

2.8 dbColumnInfo,dbGetRowsAffected,dbGetRowCount,dbHasCompleted

這一系列的函數(shù),其實(shí)是dbSendQuery的輔助函數(shù),得到的信息,使用dbGetInfo(res)都能得到。

重點(diǎn)說(shuō)一下dbHasCompleted函數(shù),函數(shù)含義是服務(wù)器端的數(shù)據(jù)是否被抽取完畢:

調(diào)用格式:

dbHasCompleted(res,...)

注:只有查詢(xún)的數(shù)據(jù)全部被R抽取完,該函數(shù)才能返回TRUE值,具體使用見(jiàn)2.9中的例子。

2.9 dbFetch,fetch

fetch是比較老的一個(gè)版本,dbFetch和fetch功能相同,不過(guò)比較鼓勵(lì)使用dbFetch。

調(diào)用格式:

dbFetch(res,n,...)

ftch(res,n,)

注:n表示讀取的行數(shù),當(dāng)n=-1時(shí),表示全部抽取。

例子:

> dbWriteTable(conn, "mtcars", mtcars)

[1] TRUE

> res

> dbFetch(res)

row_names mpg cyl disp hp drat wt qsec vs am gear carb

1 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1

2 Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2

3 Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2

4 Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1

5 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2

6 Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1

7 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1

8 Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1

9 Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2

10 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2

11 Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2

> dbClearResult(res)

[1] TRUE

>res

> while (!dbHasCompleted(res)) {

+ chunk

+ print(nrow(chunk))

+ }

[1] 10

[1] 10

[1] 10

[1] 2

> dbClearResult(res)

[1] TRUE

2.10 dbNextResult,dbMoreResults

dbMoreResults是針對(duì)多個(gè)query statement來(lái)說(shuō)的,如果還有額外的結(jié)果集需要處理,則返回TRUE,否則返回FALSE

dbNextResult 接著處理下一個(gè)statement的結(jié)果集。

調(diào)用格式:

dbNextResult(con, ...)

dbMoreResult(con,...)

例子:

> con=dbConnect(MySQL(),dbname="test",username="root",password="mdcl",client.flag=CLIENT_MULTI_STATEMENTS)

> dbListTables(con)

[1] "mtcars" "stu"

> sql

> rs1

> dbFetch(rs1, n = -1)

cyl

1?? 6

2?? 6

3?? 4

4?? 6

5?? 8

>? if (dbMoreResults(con)) {

+???????? rs2

+???????? dbFetch(rs2, n = -1)

+????? }

vs

1? 0

2? 0

3? 1

4? 1

5? 0

>?dbClearResult(rs1)

[1] TRUE

>? dbClearResult(rs2)

[1] TRUE

2.11 dbCommit ,dbBegin,dbRollback

三個(gè)事務(wù)函數(shù),和數(shù)據(jù)庫(kù)中的概念是一致的。

調(diào)用方式:

dbBegin(conn, ...)

dbCommit(conn, ...)

dbRollback(conn, ...)

總結(jié)

以上是生活随笔為你收集整理的mysql r_R之RMySQL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。