8.4 其他R包

通过前文了解,以下R包(RODBC除外)的作用仅仅是提供驱动即可,再通过DBI包与数据库交互。

8.4.1 RODBC包

RODBC包是R语言对ODBC数据库接口的封装,可连接所有的ODBC数据库,但是读写效率较低。

1.安装包

install.packages('RODBC')

2.SQL SERVER 数据库举例

library(RODBC)
con <- odbcDriverConnect("driver={SQL Server};server=192.168.2.62;database=dbname;uid=zhongyf;pwd=Zyf123456")
con
RODBC::sqlQuery(con,'select * from test')

`

  • 怎样安装驱动

请参照驱动安装

ODBC for sql server driver 下载地址地址

3.数据库字符串

请参照数据库连接字符串

#ODBC Driver 17 for SQL Server
cn <- odbcDriverConnect("Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=name;UID=username;PWD=123456;") #server 数据库 UID 数据库账户 PWD 数据库账户密码

sql server 请参照sql server连接字符串

8.4.2 ROracle包

在第一次安装这个包时遇到了很多困难,首先需要安装oracle客户端,其次配置好环境变量,最后安装包。R与Oracle的连接需要安装Oracle Instant Client

  1. 安装客户端

安装oracle客户端,根据电脑的位数选择相应的32位或64位,根据要连接数据库版本,可以去官网自行下载,本机需要下载的客户端地址

  1. 配置环境变量

根据自己所使用的系统,配置环境变量

OCI_INC='D:\app\zhongyf\product\11.2.0\client_1\oci\include'
OCI_LIB64='D:\app\zhongyf\product\11.2.0\client_1\BIN'
  1. 安装包

安装Roracle包需要配置相应版本的Rtools并添加到环境变量,另外配置两个oracle的环境变量。代码中有注释,按照自己安装版本路径修改。

由于ROracle依赖于Oracle Instant Client,安装之前一定要先安装好客户端。

install.packages('ROracle')
  1. 连接数据库

Roracle可以通过DBI包链接,除了驱动和连接字符串有差异,其他部分一样。

library(ROracle)
drv <-dbDriver("Oracle")
connect.string <- '(DESCRIPTION =
                    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.16.88.129)(PORT = 1521))
                  (CONNECT_DATA =
                      (SERVER = DEDICATED)
                    (SERVICE_NAME = bidev)
                  ))' #连接字符串

con <- dbConnect(drv,username = "query", password = "query",dbname = connect.string)
  1. 乱码问题

如果连接oracle数据库,中文乱码设置以下环境变量即可,或者在启动文件配置该环境变量。

linux下可以在文件Renviron中添加,记得引号,路径为[/opt/R/4.0.2/lib/R/etc/Renviron]

# 查询数据库编码
select userenv('language') from dual
Sys.setenv(NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8")

由于ROracle包的安装存在一定难度,具体安装说明可以参考微信公众号-宇飞的世界R包ROracle安装

8.4.3 RMySQL包

RMySQL包的主要作用可以提供驱动与mysql数据库进行连接,在本机未安装mysql的驱动的情况下.该包正在逐渐被淘汰,可以使用RMariaDB包替换。

1.安装

Win系统下直接安装即可,其它平台下需提前安装依赖环境。

#On recent Debian or Ubuntu install libmariadbclient-dev

sudo apt-get install -y libmariadbclient-dev
#On Fedora, CentOS or RHEL we need mariadb-devel:

sudo yum install mariadb-devel
#On OS-X use mariadb-connector-c from Homebrew:

brew install mariadb-connector-c
install.packages('RMySQL')

2.连接使用

上述连接方式一致,仅仅是指驱动差异

library(RMySQL)
con <- RMySQL::dbConnect(drv = RMySQL::MySQL(),host='localhost',dbname="mysql",username="root",password='123456')

RMariaDB包与RMySQL包用法基本一致,在连接时注意驱动的选择即可。

install.packages('RMariaDB')
library(RMariaDB)
con <- RMySQL::dbConnect(drv = RMariaDB::MariaDB() ,host='localhost',dbname="dbtest",username="root",password='123456')

8.4.4 RSQLite

RSQLite是练习使用R中的数据库的最简单方法,因为程序包本身包含SQLite,无需任何外部软件。

项目地址

1.安装

install.packages("RSQLite")

2.基础用法

library(DBI)
# 在内存中创建一个临时数据库
con <- dbConnect(RSQLite::SQLite(), ":memory:")

dbListTables(con)
#> character(0)
dbWriteTable(con, "mtcars", mtcars)
dbListTables(con)
#> [1] "mtcars"
df <- dbReadTable(con, "mtcars")
head(df)
#>    mpg cyl disp  hp drat   wt qsec vs am gear carb
#> 1 21.0   6  160 110 3.90 2.62 16.5  0  1    4    4
#> 2 21.0   6  160 110 3.90 2.88 17.0  0  1    4    4
#> 3 22.8   4  108  93 3.85 2.32 18.6  1  1    4    1
#> 4 21.4   6  258 110 3.08 3.21 19.4  1  0    3    1
#> 5 18.7   8  360 175 3.15 3.44 17.0  0  0    3    2
#> 6 18.1   6  225 105 2.76 3.46 20.2  1  0    3    1
res <- dbSendQuery(con, "SELECT * FROM mtcars WHERE cyl = 4")
df <- dbFetch(res)
dbClearResult(res)
head(df)
#>    mpg cyl  disp hp drat   wt qsec vs am gear carb
#> 1 22.8   4 108.0 93 3.85 2.32 18.6  1  1    4    1
#> 2 24.4   4 146.7 62 3.69 3.19 20.0  1  0    4    2
#> 3 22.8   4 140.8 95 3.92 3.15 22.9  1  0    4    2
#> 4 32.4   4  78.7 66 4.08 2.20 19.5  1  1    4    1
#> 5 30.4   4  75.7 52 4.93 1.61 18.5  1  1    4    2
#> 6 33.9   4  71.1 65 4.22 1.83 19.9  1  1    4    1
dbDisconnect(con)

基础用法与DBI功能一致。