数据库操作 - 关系型数据库 - SQL Server & My SQL

 

关系型数据库,“是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。

如下展示用R语言操作SQL Server 和 My SQL这两个典型的关系型数据库,获取并存储数据(日更数据),实现数据采集工作。

 

##获取每日最新数据
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点间,以保证对方服务器的有效响应),则可以进入到数据分析展示的环节。

 

除关系型数据库外,日常也会较多使用非关系型数据库,而且大多数NOSQL都是开源的,这也成为其被广泛使用的原因之一。

 

参考:

Sql Server 2017 官方介绍

MySQL 官方介绍

posted @ 2021-01-07 08:41  划水De雁小明  阅读(446)  评论(0编辑  收藏  举报