最近准備做一個股票的數據庫,用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