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.mzph.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;是目前被认为最好的一种内部排序方…