數據庫操做 - 關係型數據庫 - SQL Server & My SQL

 

關係型數據庫,「是指採用了關係模型來組織數據的數據庫,其以行和列的形式存儲數據,以便於用戶理解,關係型數據庫這一系列的行和列被稱爲表,一組表組成了數據庫。用戶經過查詢來檢索數據庫中的數據,而查詢是一個用於限定數據庫中某些區域的執行代碼。關係模型能夠簡單理解爲二維表格模型,而一個關係型數據庫就是由二維表及其之間的關係組成的一個數據組織。html

以下展現用R語言操做SQL Server 和 My SQL這兩個典型的關係型數據庫,獲取並存儲數據(日更數據),實現數據採集工做。mysql

 

##獲取每日最新數據
library('TTR')
library('xts')
library('zoo')
library('quantmod')
library('stringr')
library('RODBC')
library("RMySQL")
library("DBI")

## 創建鏈接
# SQL Server
myConn <- odbcConnect('SQL Server 本機服務器名',uid='用戶名',pwd='密碼')

# MySQL
mysqlconnection = dbConnect(MySQL(), user = '用戶名', password = '密碼', dbname = 'MySQL 數據庫名',host = '本機服務器名')

# 獲取數據自定義函數,操做獲取的數據寫入My SQL 數據庫
GetCodelatestlist <- function(list){
  a = 0
  while (a < length([Stock_Code])) {
    a = a + 1 
    i <- unlist(list) %>% as.character() %>% .[a]
    #獲取線上數據
    error <- simpleError("HTTP error 404")
    message <- tryCatch(getSymbols(i), error = function(error) error)
    if("simpleError" %in% class(message))
      next()
    else{
      checkTable <- simpleError("could not run statement")
      result <- tryCatch(dbReadTable(mysqlconnection,tolower(i)),error = function(checkTable) checkTable )
      if ("simpleError" %in% class(result))
      {
        getSymbols(i)
        codename <- get(i)
        Stock <- as.data.frame(codename)
        Stock$Code <- c(i)
        dbSendQuery(mysqlconnection, 'drop table if exists mydb.na')
        dbWriteTable(mysqlconnection,i,Stock,overwrite = FALSE,append = TRUE)
      }
      else {
        getSymbols(i)
        codename <- get(i)
        Stock <- as.data.frame(codename)
        Stock$Code <- c(i)
        OT <- dbReadTable(mysqlconnection,i)
        if(length(OT$Code) >= length(Stock$Code))
          next()
        else{
          dbRemoveTable(mysqlconnection,tolower(i))
          #getSymbols(i)
          #codename <- get(i)
          #Stock <- as.data.frame(codename)
          #Stock$Code <- c(i)
          dbSendQuery(mysqlconnection, 'drop table if exists mydb.na')
          dbWriteTable(mysqlconnection,i,Stock,overwrite = FALSE,append = TRUE)}
      }
    }
  }
}

## 從SQL Server數據庫中讀取分類想要的數據列表,獲取數據並實現數據再次寫入My SQL
#ETF
i_list_25 <- sqlQuery(myConn, "select [Stock_Code] from [SQL Server].[某數據表] where lable = 'ETF'")
system.time(GetCodelatestlist(i_list_25))

#汽車、能源類公司
i_list_36 <- sqlQuery(myConn, "select [Stock_Code] from [SQL Server].[某數據表] where lable = '汽車、能源類公司'")
system.time(GetCodelatestlist(i_list_36))

#科技類知名公司
i_list_117 <- sqlQuery(myConn, "select [Stock_Code] from [SQL Server].[某數據表] where lable = '科技類公司'")
system.time(GetCodelatestlist(i_list_117))

# 關閉數據庫鏈接
dbDisconnect(mysqlconnection)
odbcClose(myConn)

  

代碼經過部署能夠實現,徹底的自動化,待數據進入到數據庫(寫入Mysql數據庫的數據展現以下展現,詳細列表請自行運行代碼,將代碼部署後實現自動化,啓動運行時間最好在凌晨到第二天5點間,以保證對方服務器的有效響應),則能夠進入到數據分析展現的環節。sql

 

除關係型數據庫外,平常也會較多使用非關係型數據庫,並且大多數NOSQL都是開源的,這也成爲其被普遍使用的緣由之一。數據庫

 

參考:服務器

Sql Server 2017 官方介紹app

MySQL 官方介紹函數

相關文章
相關標籤/搜索