R语言数据库交互学习笔记(1)

来源:互联网 发布:软件维护 编辑:程序博客网 时间:2024/06/17 18:12

R语言与数据库有两种连接方式,首先尝试一下RMySQL
主要参考来自:

http://blog.fens.me/r-mysql-rmysql/

1.RMySQL在ubuntu下的安装

  • 在R的环境安装RMySQL
    install.packages('RMySQL')
    安装出错了,提示我们需要增加MySQL安装目录的配置参数。
    同时我们可以得到一个packages安装的目录
  • 打开终端
    # 安装mysql类库     > sudo apt-get install libdbd-mysql libmysqlclient-dev    # 找到mysql的安装目录    > whereis mysql    # 找刚刚下载的RMySQL    >ls /tmp/RtmpNAlN6s/downloaded_packages    # 通过命令安装RMySQL    >R CMD INSTALL --configure-args='--with-mysql-dir=/usr/lib/mysql' /tmp/RtmpNAlN6s/downloaded_packages/RMySQL_0.10.9.tar.gz
  • 在MySQL中建库建表
mysql> create database rmysql;#创建数据库的专用账户mysql> grant all on rmysql.* to rmysql@'%' identified by 'rmysql';mysql> grant all on rmysql.* to rmysql@localhost identified by 'rmysql';mysql> use rmysql#创建新表:支持事务处理mysql> CREATE TABLE user(    -> id INT AUTO_INCREMENT PRIMARY KEY,    -> name varchar(20) NOT NULL UNIQUE    -> )ENGINE=INNODB DEFAULT CHARSET=utf8;#数据插入mysql> INSERT INTO user(name) values('AA'),('AB'),('BA');
  • 通过R程序,读MySQL数据库数据
> library(RMySQL)> conn <- dbConnect(MySQL(), dbname = "rmysql", username="rmysql", password="rmysql")> users = dbGetQuery(conn, "SELECT * FROM user")#显示表中数据> users

2.RMySQL函数使用

  • RMySQL辅助操作
    • 加载类库
      > library(RMySQL)
    • 建立本地连接
      >conn<-dbConnect(MySQL(),dbname="rmysql",username="rmysql",password="rmysql",client.flag=CLIENT_MULTI_STATEMENTS)
    • 建立远程连接
      >conn<-dbConnect(MySQL(),dbname="rmysql",username="rmysql",password="rmysql",host="192.168.1.201",port=3306)
    • 关闭连接
      >dbDisconnect(conn)
    • 查看数据库的表
      > dbListTables(conn)
    • 查看表的字段
      >dbListFields(conn, "user")
    • 查询MySQL信息
    >summary(MySQL(), verbose = TRUE)     # MySQL连接实例信息    > summary(conn, verbose = TRUE)    #MySQL连接信息    > dbListConnections(MySQL())
  • RMySQL数据库操作
# 1)建表并插入数据> t_demo<-data.frame(  a=seq(1:10),  b=letters[1:10],  c=rnorm(10))> dbWriteTable(conn, "demo", t_demo)# 获得整个表数据> dbReadTable(conn, "demo")    a b           c1   1 a  0.988681642   2 b -0.669357703   3 c  0.277036384   4 d  1.361371565   5 e -0.702910176   6 f  1.612350887   7 g  0.176160688   8 h  0.297000179   9 i  0.1903271910 10 j -0.06222173# 插入新数据> dbWriteTable(conn, "demo", t_demo, append=TRUE)> dbReadTable(conn, "demo")   row_names  a b           c1          1  1 a  0.988681642          2  2 b -0.669357703          3  3 c  0.277036384          4  4 d  1.361371565          5  5 e -0.702910176          6  6 f  1.612350887          7  7 g  0.176160688          8  8 h  0.297000179          9  9 i  0.1903271910        10 10 j -0.0622217311         1  1 a  0.9886816412         2  2 b -0.6693577013         3  3 c  0.2770363814         4  4 d  1.3613715615         5  5 e -0.7029101716         6  6 f  1.6123508817         7  7 g  0.1761606818         8  8 h  0.2970001719         9  9 i  0.1903271920        10 10 j -0.06222173# 覆盖原表数据> dbWriteTable(conn, "demo", t_demo, overwrite=TRUE)# 不插入row.names字段> dbWriteTable(conn, "demo", t_demo,row.names=FALSE,overwrite=TRUE)# 2)查询数据> d0 <- dbGetQuery(conn, "SELECT * FROM demo where c>0")> class(d0)[1] "data.frame"> d0  row_names a b         c1         1 1 a 0.98868162         3 3 c 0.27703643         4 4 d 1.36137164         6 6 f 1.61235095         7 7 g 0.17616076         8 8 h 0.29700027         9 9 i 0.1903272# 执行SQL脚本查询,并分页> rs <- dbSendQuery(conn, "SELECT * FROM demo where c>0")> class(rs)[1] "MySQLResult"attr(,"package")[1] "RMySQL"> mysqlCloseResult(rs)[1] TRUE> d1 <- fetch(rs, n = 3)> d1  row_names a b         c1         1 1 a 0.98868162         3 3 c 0.27703643         4 4 d 1.3613716# 3)查看集统计信息> summary(rs, verbose = TRUE)  row_names               a              b                   c          Length:7           Min.   :1.000   Length:7           Min.   :0.1762   Class :character   1st Qu.:3.500   Class :character   1st Qu.:0.2337   Mode  :character   Median :6.000   Mode  :character   Median :0.2970                      Mean   :5.429                      Mean   :0.7004                      3rd Qu.:7.500                      3rd Qu.:1.1750                      Max.   :9.000                      Max.   :1.6124# 4)删除表> if(dbExistsTable(conn,'demo')){+     dbRemoveTable(conn, "demo")+ }[1] TRUE

执行SQL语句,dbSendQuery

> query<-dbSendQuery(conn, "show tables")> data <- fetch(query, n = -1)> data  Tables_in_rmysql1           t_demo2           t_user> mysqlCloseResult(query)[1] TRUE
0 0
原创粉丝点击