R語言RODBC數據庫操作


  最近准備做一個股票的數據庫,用R語言來獲取數據,然后存在SQL Sever 2016 express 里面,雖然前面接觸過一些操作,但是還是很不熟悉,現在數據已經能獲取到了,是時候好好學習一下怎么用R來操作數據庫.

  • RODBC基礎(翻譯自RODBC文檔)
  1. 連接數據庫
###載入包
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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM