R语言RODBC数据库操作
Posted NEFCODER
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言RODBC数据库操作相关的知识,希望对你有一定的参考价值。
最近准备做一个股票的数据库,用R语言来获取数据,然后存在SQL Sever 2016 express 里面,虽然前面接触过一些操作,但是还是很不熟悉,现在数据已经能获取到了,是时候好好学习一下怎么用R来操作数据库.
- RODBC基础(翻译自RODBC文档)
- 连接数据库
###载入包 library(RODBC) ###新建一个连接 ch <- odbcConnect("some dsn") ###关闭连接 colse(ch) ###或者 odbcClose(ch)
###如果有密码/大多数情况都有
ch <- odbcConnect("some_dsn", uid = "user", pwd = "****")
2. 从数据库读取文件
###获取可以访问的表 sqlTables(ch) ###更加精确的查询 sqlTables(ch, tableType = "TABLE") sqlTables(ch, schema = "some pattern") sqlTables(ch, tableName = "some pattern") ###这里的schema百度说等价于用户名,我对数据库不怎么了解 ###要获取某个表的数据 res <- sqlFetch(ch, "table name") ###限制最大行数 res <- sqlFetch(ch, "table name", max = m) res <- sqlFetchMore(ch, "table name", max = m) ###细节有机会再看了,这里返回的是一个data.frame ###提取列 sqlColumns(ch, "USArrests") ###使用SQL语句筛选出需要返回的数据 sqlQuery(sh, paste("SELECT State, Murder FROM USArrests", + "WHERE Rape > 30 ORDER BY Murder")) ###SQL语句的意义另作讨论,不在本文范畴内,需要指出每个DBMS的SQL语句可能不一样
表名字
文中说DBMS允许的表名称可能不一样,有的表名允许有空格,小数点等,像这种数据库需要在连接的时候指定一下参数,具体的看连接的函数,命名的时候还是不要给自己找麻烦的好.
3.向数据库写入
###删除表,可能存在的 sqlDrop(ch, "table name", errors = FALSE) ###创建表,默认使用的是数据框的名字,还有一个函数sqlUpdate sqlSave(ch, some data frame) ###数据类型存入数据库后只有二进制值和字符串(日期将会作为字符串)
讲道理,会这些应该就能满足我的需要了,虽然这里面肯定还有很多坑,只有实践才会知道了。
- 和SQL server交互
SQl server的安装不在这里说,都是easy的事情,不过需要注意的是在现版本的sql server,需要自己再下载一个management studio(SSMS),至于为什么要装这个......还不是因为不熟悉......
要使用ODBC需要先配置ODBC数据源,方法是win+R搜索ODBC,选择用户dsn,点击添加,选择sql server,服务器不要使用下拉栏的,反正我的会报错,服务器名称去SSMS里面查看,然后复制过来就好。
测试是否可以连接:
这种就算是可以了。
这里我使用一个下载的股票数据来测试,如下:
###其中temptable是我自己创建的 ###此函数是我获取股票数据的 stock_data_1 <- get_stock_data_today() sqlSave(stock_dsn,stock_data_1)
能成功写入。
###增加一行 sqlSave(stock_dsn,stock_data_1[1,],"stock_data_1",append = TRUE) ###这里增加一行之后,rownames会有重复,再次读取的时候会报错 ###但是像这样读取不会报错,却会多一列。 temp <- sqlFetch(stock_dsn,"stock_data_1",rownames = FALSE) ###删除表 sqlDrop(stock_dsn,"stock_data_1")
目前这样可以完全满足我的需求了~~~nice
以上是关于R语言RODBC数据库操作的主要内容,如果未能解决你的问题,请参考以下文章
R语言︱ 数据库SQL-R连接与SQL语句执行(RODBCsqldf包)
R语言︱ 数据库SQL-R连接与SQL语句执行(RODBCsqldf包)
如何在 R 中使用 RODBC 在 MS Access 中执行查询?
R语言之安装RODBC错误信息configure: error: "ODBC headers sql.hand sqlext.h not found"