mysql r_R之RMySQL

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安裝,參照上一篇關于liunx下安裝mysql的文章。

1. 安裝RMySQL包

在裝RMySQL包之前,確定電腦上裝了libmysqlclient-dev,否則在安裝時會出現錯誤。

~$ sudo apt-get install libmysqlclient-dev #安裝客戶端的開發支持

~$ R

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

> .libPaths(RMySQL)

2.RMySQL支持的相關函數

輔助函數

2.1 dbConnect,dbDisconnect #數據庫連接函數

2.2 dbListFields ,dbListTables,dbGetInfo,dbListResults,summary,dbGetException,dbExistsTable #查看數據庫或者參數信息

查詢函數

2.3 dbGetQuery #查詢函數

2.4 dbReadTable #讀取表的數據

更新函數

2.5 dbWriteTable #創建數據庫表或者將數據寫入對應的表

2.6 dbRemoveTable # 刪除數據庫中的表

dbSendQuery函數

2.7 dbSendQuery ,dbClearResult #將query交給數據庫引擎

2.8 dbColumnInfo,dbGetRowsAffected,dbGetRowCount,dbHasCompleted #查看數據庫引擎執行結果

2.9 dbFetch,fetch #將dbSendQuery函數的結果抽取出來

2.10 dbNextResult,dbMoreResults #一條一條讀取結果

事務函數

2.11 dbCommit,dbBegin,dbRollback

2.1 dbConnect和dbDisconnect函數

函數調用格式如下:

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

dbDisconnect(conn, ...)

注:client.flag=CLIENT_MULTI_STATEMENTS表示客戶端允許執行多個statement。

由于和傳統的設置參數差不多,所以下面直接看例子:

> 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) #關閉連接

注:本地連接不用設置host和port,另外summary屬于RMySQL的函數,是S4類,用戶mysql驅動的信息

2.2 dbListFields ,dbListTables,dbGetInfo,dbListResults,summary,dbGetException查看數據庫或者參數信息

函數調用格式如下:

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

dbListTables(conn, ...) #查看數據庫下表

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

dbListResults(conn, ...) #列出conn的查詢結果

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

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 數據庫查詢

dbGetQuery實際要執行一連串的動作,在內部實際上會執行dbSendQuery函數,然后當dbHasCompleted為TRUE之后,又自動fetch出返回的結果,最后由on.exit保證執行dbClearResult。該函數支持各種各樣的query,當執行select操作時,返回data.frame類型的結果;當執行insert/update操作時,返回NULL。

函數調用格式:

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 讀取整個表的數據

調用格式:

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 將數據寫入數據庫

調用格式:

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

其中row.names表示是否將row.names寫入數據庫的,作為單獨的一列;overwrite=T表示會覆蓋掉原先的數據;append=T表示在原先的數據后面進行插入。

例子:

> dbGetQuery(conn,"truncate table stu")

NULL

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

[1] stuid name age<0行>(或0-長度的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? 刪除表實際上執行了“Drop table name”的命令,在2.3中給出了drop的例子。

調用格式:

dbRemoveTable(conn,name)

例子:

> dbListTables(conn)

[1] "people" "stu"

> dbRemoveTable(conn,"people")

[1] TRUE

> dbListTables(conn)

[1] "stu"

2.7 dbSendQuery ,dbClearResult

dbSendQuery函數提交查詢,并在服務器那端同步執行,但是并不抽取其中的結果,因此需要配合dbFetch來使用,最后抽取完畢之后,使用dbClearResult來清洗返回的結果。既然有了dbReadTable函數了,為什么還要有dbSendQuery呢?如果需要返回的數據很大的情況下,而R又裝不下,如果使用dbReadTable那么鐵定不行了。dbSendQuery函數來說,DBMS執行了query語句,可能生成了大量的數據,不同的數據庫驅動可能有不同的處理方式,有的存儲在服務器端,一點一點發給R;有的傳給客戶端,但是不會一下子傳給R。

dbClearResult函數釋放占用的資源。

調用格式:

dbSendQuery(conn, statement)

dbClearResult(res, ...)

如果dbConnect中client.flag沒有設置下,只能執行一條statement,而且不dbClearResult執行的res是不能再執行dbSendQuery函數的,也就是說正確的執行方式如下:

rs1=dbSendQuery(conn, statement)

...

dbClearResult(rs1, ...)

rs2=dbSendQuery(conn, statement)

...

dbClearResult(rs2, ...)

而下面的調用格式是錯的:

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")

錯誤于.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

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

重點說一下dbHasCompleted函數,函數含義是服務器端的數據是否被抽取完畢:

調用格式:

dbHasCompleted(res,...)

注:只有查詢的數據全部被R抽取完,該函數才能返回TRUE值,具體使用見2.9中的例子。

2.9 dbFetch,fetch

fetch是比較老的一個版本,dbFetch和fetch功能相同,不過比較鼓勵使用dbFetch。

調用格式:

dbFetch(res,n,...)

ftch(res,n,)

注:n表示讀取的行數,當n=-1時,表示全部抽取。

例子:

> 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是針對多個query statement來說的,如果還有額外的結果集需要處理,則返回TRUE,否則返回FALSE

dbNextResult 接著處理下一個statement的結果集。

調用格式:

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

三個事務函數,和數據庫中的概念是一致的。

調用方式:

dbBegin(conn, ...)

dbCommit(conn, ...)

dbRollback(conn, ...)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529553.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529553.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529553.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql 字符轉換函數是_MySQL日期和字符串轉換函數

Mysql中to_char()和str_to_date()函數轉載路徑&#xff1a;https://blog.csdn.net/ricardo_mli/article/details/802175121.字符串轉換成日期格式str_to_date(date,’%Y-%m-%d’)----->相當于Oracle中的to_char();例子&#xff1a;INSERT INTOt_order(order_time)VALUES(str…

mysql數據加百分號_使用MySQL SELECT語句時,在每個值的末尾添加一個百分號(%)...

要在末尾添加百分號&#xff0c;請使用CONCAT()函數。讓我們首先創建一個表-mysql> create table DemoTable(StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,StudentName varchar(100),StudentScore int);使用插入命令在表中插入一些記錄-mysql> insert into DemoTa…

mysql 分頁 jdbc_JDBC調用MySQL分頁存儲過程實現(一)

DROP PROCEDURE IF EXISTS pro_pager;CREATE DEFINER root% PROCEDURE pro_pager(in p_pageNo int, /*當前頁*/in p_perPageCnt int, /*每頁記錄數*/in p_sql VARCHAR(2000), /*查詢sql語句*/out v_totalRowsCnt int, /*記錄總條數*/out v_totalPageCnt int) /*記錄總頁數*/BE…

mariadb mysql表_mysql/mariadb學習記錄——創建刪除數據庫、表的基本命令

查看已有的數據庫&#xff1a;mysql>show databases;--------------------| Database |--------------------| information_schema || test |--------------------2 rows in set (0.05 sec)新建數據庫語句:mysql>create database wzu;Query OK,1 row affected (0.05sec)m…

zabbix proxy mysql_zabbix proxy 配置

在監控大量服務器時&#xff0c;如果將所有的請求都發送到一個zabbix server上&#xff0c;將會對我們的zabbix server造成很大的壓力&#xff0c;我們在規劃多個區域或機房進行監控的時候&#xff0c;會考慮到使用zabbix proxy 來代理zabbix server 的部分功能。zabbix server…

mysql修改數據庫結構用哪一項_mysql alter修改數據庫表結構用法

1.alter操作表字段(1)增加字段alter table 表名 add 字段名 字段類型&#xff1b;alter table student add name varchar(10)&#xff1b;(2)修改字段alter table 表名 change 舊字段名 新字段名 字段類型&#xff1b;alter table 表名 modify 字段名 字段類型&#xff1b;//修…

mvc mysql linq_MVC3+Linq to sql 顯示數據庫中數據表的數據

1&#xff1a;首先創建asp.net mvc3應用程序 2&#xff1a;創建項目完成后 找到controllers文件鼠標右擊選擇添加控制器 3 為models文件夾添加一個linq to sql類文件&#xff0c;然后把數據庫中的數據庫復制進來。如截圖操作 4&#xff1a;添加控制器好后會生成一個HomeControl…

bash給腳本加進度條_shell腳本實現多彩進度條

代碼如下&#xff1a;1 #!/bin/bash2 i0;3 str""4 arr("|" "/" "-" "\\")5 while [ $i -le 100 ]6 do7 let indexi%48 let indexcolori%89 let color30indexcolor10 printf "\e[0;$color;1m[%-100s][%d%%]%c\r" &…

koa mysql mongodb_koa 操作MongoDB數據庫

安裝安裝MongoDBnpm install mongodb --save引入中間件引入mongodb下面的連接模塊MongoClient// 引入MongoDB 連接模塊const MongoClient MongoDB.MongoClient;配置中間件定義數據庫連接的地址以及配置數據庫的名稱let url "mongodb://localhost:27017/";let dbNam…

mysql 64位 安裝1045_MySql?安裝時的1045錯誤

MySql 安裝到最后一步遇到1045錯誤Access denied for user rootlocalhost (usingpassword:YES)解決方案一&#xff1a;卸載MySQL&#xff0c;重新安裝1, 卸載MySQL2, 刪除目錄 C:\Documents and Settings\All Users\ApplicationData\MySQL,還要刪除MySQL安裝目錄3, 重新安裝MyS…

mysql工作表格制作教程_Access制作復雜報表

何制作復雜報表利用excel輸出復雜報表 在讀這篇文章以前首先要提醒大家&#xff0c;Access 本身的報表也具有很強的實用性和強大的功能&#xff0c;只有當你發掘了其本身全部的功能卻仍不能滿足你對報表的特殊要求時才請使用 Excel 輸出報表。很明顯&#xff0c;使用 Excel 輸出…

php+mysql投票代碼_PHP+jQuery+MySql實現紅藍投票功能

本文是一篇綜合知識應用類文章&#xff0c;需要您具備PHP、jQuery、MySQL以及html和css方面的基本知識。本文在《PHPMySqljQuery實現的“頂”和“踩”投票功能》一文基礎上做了適當改進&#xff0c;共用了數據表&#xff0c;您可以先點擊了解這篇文章。HTML我們需要在頁面中展示…

numpy 最大值_第 85 天:NumPy 統計函數

數學統計在我們的程序當中特別是數據分析當中是必不可少的一部分&#xff0c;本文就來介紹一下 NumPy 常見的統計函數。最大值與最小值numpy.amin()用于計算數組中的元素沿指定軸的最小值。可以通過 axis 參數傳入坐標軸來指定統計的軸&#xff0c;當指定 axis 時&#xff0c;a…

java中如何實現變量可配置_Java基礎-如何配置環境變量

Java環境變量詳細教程第一步、打開電腦環境變量設置窗口以Win10系統為例子。在桌面找到此電腦&#xff0c;右鍵此電腦— —>屬性&#xff0c;點擊屬性— —>點擊左側高級系統設置點擊高級系統設置點擊環境變量第二步、新建JAVA_HOME點擊系統變量中的新建,出現輸入框&…

python三引號解析_[宜配屋]聽圖閣

和C語言一樣&#xff0c;引號屬于特殊功能字符&#xff0c;不能夠像普通字符那樣直接通過print打印&#xff0c;需要進行一些處理&#xff0c;比如說反斜杠轉義等。這里介紹幾種打印三引號的方法&#xff0c;希望對需要的朋友有用。1、第一中方法比較簡單&#xff0c;直接使用三…

abaqus python 建立節點集合_在Python中創建Abaqus集

我想用Python在Abaqus中創建一個帶邊的幾何集。我不會事先知道邊的數目。嘗試將邊放入數組中&#xff0c;然后創建集合。你知道嗎myEdgesForSet []for i in range(0, len(mdb.models[Model].parts[Part].edges)):if something in mdb.models[Model].parts[Part].edges[i].feat…

java類默認訪問權限_Java的四種訪問權限

? 所謂訪問權限&#xff0c;指的就是本類中的成員變量、成員方法對其他類的可見性?試想一想&#xff0c;當我們修改一個非常龐大的項目時&#xff0c;如果所有變量和方法都是公共權限&#xff0c;那么后端中任何類都有權限去修改它的變量和方法&#xff0c;很有可能修改后就導…

java 數組 反射_【譯】10. Java反射——數組

用Java反射來處理數組有時候是技巧性很強的。特別是如果你需要獲取一個給定類型的數組的Class對象&#xff0c;像int[ ]等。本文將講述怎么用Java反射來創建數組和獲取數組的Class對象。下面是所涵蓋的主題列表&#xff1a;java.lang.reflect.ArrayCreating ArraysAccessing Ar…

定時執行java程序_如何讓Java程序定時運行

由于項目開發的需要&#xff0c;必須實現讓一個Java程序定時運行。比如&#xff0c;我的項目中&#xff0c;有一個網絡蜘蛛&#xff0c;需要從互聯網上抓取數據&#xff0c;與其配合&#xff0c;有另一個程序來對新抓取的頁面進行索引的創建&#xff0c;由于數據源更新頻率不高…

java遞歸實現排序_快速排序算法原理及java遞歸實現

快速排序 對冒泡排序的一種改進&#xff0c;若初始記錄序列按關鍵字有序或基本有序&#xff0c;蛻化為冒泡排序。使用的是遞歸原理&#xff0c;在所有同數量級O(n longn) 的排序方法中&#xff0c;其平均性能最好。就平均時間而言&#xff0c;是目前被認為最好的一種內部排序方…