• 首页
  • Zeebu中文网
  • Zeebu中文网

    你的位置:Edgeware中文网 > Zeebu中文网 >

    R语言︱ 数据库SQL

    发布日期:2025-01-04 12:04    点击次数:74
      数据库是极其重要的R语言数据导入源数据之地,读入包有sqldf、RODBC等。跟SQL server相连有RODBC,跟MySQL链接的有RMySQL。但是在R里面,回传文本会出现截断的情况,这一情况可把我弄得有点手足无措。     一、数据库读入——RODBC包     CRAN 里面的包 RODBC 提供了 ODBC的访问接口: odbcConnect 或 odbcDriverConnect (在Windows图形化界面下,可以通过对话框选择数据库) 可以打开一个连接,返回一个用于随后数据库访问的控制(handle)。 打印一个连接会给出ODBC连接的一些细节,而调用 odbcGetInfo 会给出客户端和服务器的一些细节信息。 在一个连接中的表的细节信息可以通过函数 sqlTables 获得。 函数 sqlSave 会把 R 数据框复制到一个数据库的表中, 而函数 sqlFetch 会把一个数据库中的表拷贝到 一个 R 的数据框中。 通过sqlQuery进行查询,返回的结果是 R 的数据框。(sqlCopy把一个 查询传给数据库,返回结果在数据库中以表的方式保存。) 一种比较好的控制方式是首先调用 odbcQuery, 然后 用 sqlGetResults 取得结果。后者可用于一个循环中 每次获得有限行,就如函数 sqlFetchMore 的功能。 连接可以通过调用函数 close 或 odbcClose 来关闭。 没有 R 对象对应或不在 R 会话后面的连接也可以调用这两个函数来关闭, 但会有警告信息。      print? #安装RODBC包   install.packages("RODBC")    library(RODBC)   mycon<-odbcConnect("mydsn",uid="user",pwd="rply")   #通过一个数据源名称(mydsn)和用户名(user)以及密码(rply,如果没有设置,可以直接忽略)打开了一个ODBC数据库连接      data(USArrests)   #将R自带的“USArrests”表写进数据库里   sqlSave(mycon,USArrests,rownames="state",addPK=TRUE)   #将数据流保存,这时打开SQL Server就可以看到新建的USArrests表了   rm(USArrests)   #清除USArrests变量      sqlFetch(mycon, "USArrests" ,rownames="state")   #输出USArrests表中的内容   sqlQuery(mycon,"select * from USArrests")   #对USArrests表执行了SQL语句select,并将结果输出      sqlDrop(channel,"USArrests")   #删除USArrests表   close(mycon)   #关闭连接   本段来自R语言︱文件读入、读出一些方法罗列(批量xlsx文件、数据库、文本txt、文件夹)   1、sqlSave函数    print? sqlSave(channel, dat, tablename = NULL, append = FALSE,           rownames = TRUE, colnames = FALSE, verbose = FALSE,           safer = TRUE, addPK = FALSE, typeInfo, varTypes,           fast = TRUE, test = FALSE, nastring = NULL)   其中这个函数的使用还是很讲究的,参数的认识很重要。   append代表是否追加,默认不追加,如果一张已经有数据的表,就可以用append追加新的数据,需要同样的column,一般开个这个就行。 rownames,可以是逻辑值,也可以是字符型。 colnames,列名; verbose,默认为FALSE,是否发送语句到R界面,如果TRUE,那么每条上传数据就会出现在命令栏目致之中。 addPK,是否将rownames指定为主键。   2、sqlUpdate函数    print? sqlUpdate(channel, dat, tablename = NULL, index = NULL,             verbose = FALSE, test = FALSE, nastring = NULL,             fast = TRUE)   更新已经存在的表格,需要包括已经存在的列。       ——————————————————————————————————————————————   二、sqldf包   本包的学习来自CDA DSC课程,L2-R语言第四讲内容,由常老师主讲。与RODBC的区别在于,前面是直接调用数据库SQL中的数据;而该包是在R语言环境中,执行SQL搜索语言。 组合使用:RODBC从数据库读入环境,sqldf进行搜索(适合SQL大神)。 其他函数的类似功能可以看:R语言数据集合并、数据增减     1、SQL基本特点   SQL语句语句特点:先全局选择,再局部选择 Select * from sale where year=2010 and ...   where后面可以接很多,有比较运算符,算数运算符,逻辑运算符。 比较运算符号:=(等于,不是双引号);!=(不等于);>,<,>=,<= 算数运算符:*,/,+,- 逻辑运算符:&&(and,与),