赞
踩
用R语言做数据分析时,常常需要从多种数据源取数据,其中数据库是非常常见的数据源。RMySQL包,可以在R语言中对Mysql数据库进行增删改查的操作。
install.packages(‘RMySQL’,type=‘source’)
fatal error: mysql.h: No such file or directory
报错上面提示:没有发现依赖包需要安装
环境下安装:
rpm: mariadb-devel | mysql-devel
sudo yum install mariadb-devel
sudo yum install mysql-devel
然后运行install.packages(‘RMySQL’)安装成功
apt update //只检查,不更新(已安装的软件包是否有可用的更新,给出汇总报告)
apt upgrade //更新已安装的软件包
apt install mysql-server
//vim: command not found
apt-get install vim
apt-get install mariadb-devel
apt-get install libmysqlclient-dev
install.packages("RMySQL")
library(RMySQL)
help(package="RMySQL") #查看说明文档
#创建数据库连接
con <- dbConnect(MySQL(), host="", dbname="", user="", password="")
summary(con) #获取连接信息
dbGetInfo(con) #获取连接信息
dbListTables(con) #查看database下所有表格
dbRemoveTable(con, “test”) #删除名为test的表
用dbConnect函数创建连接,驱动类型设置为MySQL(),用户名user、密码password、主机host、端口port、数据库dbname这些参数需要根据实际情况修改,其中端口port默认值是3306。
创造一个新的数据库并使用,SQL查询可以通过dbSendQuery或dbGetQuery传给数据库管理系统。dbGetQuery传送查询语句,把结果以数据框形式返回。dbSendQuery传送查询,返回的结果是继承"DBIResult"的一个子类的对象。函数fetch用于获得查询结果的部分或全部行,并以列表返回。函数dbHasCompleted确定是否所有行已经获得了,而dbGetRowCount返回结果中行的数目。如果只是简单的读整个表,也可以用dbReadTable函数。
dbCreateTable函数创建表:
# 方法1:字符向量
dbCreateTable(con,'table1',fields =c("id"='int',"value"="float"))
# 方法2:数据框
dbCreateTable(con,'table2',fields = mtcars)
注意点:
设置fields参数时,用命名的字符向量(名字为字段名,值为字段数据类型)或数据框表示
表只能创建一次,重复创建会报错。
3.sql语句创建表
运行dbSendQuery函数,调用sql语句创建表,该函数返回一个RMySQLResult类。该方法可以重复运行,不会报错。
# creating tables in bookstore:
dbSendQuery(mydb, "
CREATE TABLE books (
book_id INT,
title VARCHAR(50),
author VARCHAR(50));")
# Show table using R:
dbListTables(mydb)
dbWriteTable函数写入表
#写数据库表
fruits <-data.frame(id=1:5,name=c("苹果","香蕉","梨子","玉米","西瓜"),price=c(8.8,4.98,7.8,6,2.1),status=c("无","打折","无","售罄","批发"))
dbListTables(con)
dbWriteTable(con,"表名",fruits)
dbListTables(con)
注意点:
第一次写入时,若数据库中无该表,会根据表名自动创建
重复写入时,需要设置写入行为:
append和overwrite两个参数不能同时设置为TRUE。
sql语句插入数据:
运行dbSendStatment函数,调用sql语句插入数据。
dbSendStatement(con,'insert into table1 values(1,12)')
注意点:
重复运行会重复插入数据
dbReadTable函数读取表:
#读数据库
dbReadTable(con,"表名")#中文出现乱码,这是因为字符编码格式不统一的问题
注意点:
返回的是整个表的数据
为解决中文显示问题,若运行R的操作系统为window,需要设置编码为gbk,为Linux则需要设置为utf8
返回的数据格式为data.frame
sql语句读取表:
通过运行dbGetQuery或dbSendQuery函数,调用sql语句读取表。
dbGetQuery函数运行sql语句,返回data.frame。可以在sql语句中编写筛选语句。
# 读取完整表
dbGetQuery(con,'select * from city')
# 读取筛选的表
dbGetQuery(con,'select id,name from city where id > 10')
dbSendQuery函数运行sql语句,返回MySQLResult类。对该类使用dbFetch函数,可以筛选行,返回data.frame。用完后需要用dbClearResult函数清理结果。
# 筛选前3行数据
res <- dbSendQuery(con,'select * from city')
dbFetch(res,3)
用dbRemoveTable函数删除表。
# 删除表
dbRemoveTable(con,'table1')
完成所有的操作后,需要关闭连接。
# 关闭连接
dbDisconnect(con)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。