如何用R连接mysql数据库

     在百度上找了一下,大概有两种连接方法(RMySQL和sqldf),目前两种都试了一下,其中一种可以(RMySQL),另外一种暂时没有找到方法(sqldf),可以了我再奉上。


     首先我们要下载RMySQL和DBI包,这个在网络上都可以找到,前段时间升级Rstudio后,还出现了连接不上清华的R镜像站问题,以及下载包默认使用国外站的问题,此处一并说明一下。

     连接不上清华的R镜像站问题,我是直接连接了兰州站,下载包更新包没什么问题。

     下载包默认使用国外站的问题,我修改了一下默认镜像站地址,你需要找到R根目录下的./etc/Rprofile.site文件,打开编辑后找到:

  1. # set a CRAN mirror  
  2.  local({r <- getOption("repos")  
  3.        r["CRAN"] <- "http://mirror.bjtu.edu.cn/cran/"  
  4.        options(repos=r)})  

      把里面的地址修改成合适你的镜像站地址,保存重启程序就行。

      好了,现在进入正题,下载完后我们就可以使用包了,下面的代码中红色字体需要自己根据数据库参数设定:

library(RMySQL)
library(DBI)
con <- dbConnect(MySQL(), dbname = " analysis", username=" admin", password=" ******", host=" 192.168.* .*", port=3306)
summary(con)
dbGetInfo(con)
dbListTables(con)
#写数据库表
fruits<-data.frame(id=1:5,name=c("apple","banana","pear","yumi","xigua"),price=c(8.8,4.98,7.8,6,2.1),status=c("no","discount","no","no","same"))
dbListTables(con)
dbWriteTable(con,"fruits",fruits)
dbListTables(con)
#读数据库
dbReadTable(con,"fruits")#中文出现乱码,这是因为字符编码格式不统一的问题
dbSendQuery(con,'SETNAMESuftf8')
dbReadTable(con,"fruits")#没有乱码问题了
#写数据表,覆盖追加
testA<-data.frame(id=1:6,e=c("a","b","c","d","e","f"),c=c("我","的","世","界","变","得"))
testB<-data.frame(id=7:13,e=c("g","h","i","j","k","l","m"),c=c("奇","妙","跟","难","以","言","喻"))
#直接写testA写入test表中
dbWriteTable(con,"test",testA,row.names=F)
dbReadTable(con,"test")
#追加写testB追加在test表后
dbWriteTable(con,"test",testB,append=T,row.names=F)
dbReadTable(con,"test")
#覆盖写testB覆盖test表
dbWriteTable(con,"test",testB,overwrite=T,row.names=F)
dbReadTable(con,"test")
#用SQL语句查询dbGetQuery()和dbSendQuery()两种方法
dbGetQuery(con,"SELECT * FROM fruits limit 3")
res<-dbSendQuery(con,"SELECT * FROM fruits")
data<-dbFetch(res,n=2)#取前2条数据,n=-1时是获取所有数据
data
data<-dbFetch(res,n=-1)#取余下所有数据
data
dbClearResult(res)
dbDisconnect(con)#断开连接
#用SQL语句批量查询
con<-dbConnect(MySQL(),host="192.168.44.197",dbname="analysis",user="admin",password="9fbank",client.flag=CLIENT_MULTI_STATEMENTS)#client.flag设置这样支持批量查询
dbSendQuery(con,'SETNAMESutf8')
sql<-"SELECT * FROM fruits;SELECT count(*) FROM zj_jieliu_20170930"
res1<-dbSendQuery(con,sql)
dbFetch(res1,n=-1)
if(dbMoreResults(con)){
  res2<-dbNextResult(con)
  dbFetch(res2,n=-1)
}
dbDisconnect(con)


      目前使用后觉得还能比较好的支持查询和取数,各位同学如果还有什么问题,我们可以稍后再探讨。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值