R語言實現(xiàn)操作MySQL數(shù)據(jù)庫
用R語言做數(shù)據(jù)分析時,常常需要從多種數(shù)據(jù)源取數(shù)據(jù),其中數(shù)據(jù)庫是非常常見的數(shù)據(jù)源。用R操作MySQL數(shù)據(jù)庫,可以說是數(shù)據(jù)分析師必備的技能了,本文介紹RMySQL包,可以在R語言中對數(shù)據(jù)庫進行增刪改查的操作。
軟件版本
- win10 64bit
- r3.6.1
- rstudio 1.2
- RMySQL 0.10.20
安裝包
install.packages('RMySQL')
創(chuàng)建連接
用dbConnect函數(shù)創(chuàng)建連接,驅(qū)動類型設(shè)置為MySQL(),用戶名user、密碼password、主機host、端口port、數(shù)據(jù)庫dbname這些參數(shù)需要根據(jù)實際情況修改,其中端口port默認值是3306。
# 加載包 library(RMySQL) # 創(chuàng)建連接 con <- dbConnect(MySQL(), user="root", password="xxx", host="192.168.1.244", port=3306, dbname="test")
還可以通過一些命令,查看連接的相關(guān)信息。
# 連接概述 summary(con)
## <MySQLConnection:0,5> ## User: root ## Host: 192.168.1.244 ## Dbname: test ## Connection type: 192.168.1.244 via TCP/IP ## ## Results:
# 連接詳情 dbGetInfo(con)
## $host ## [1] "192.168.1.244" ## ## $user ## [1] "root" ## ## $dbname ## [1] "test" ## ## $conType ## [1] "192.168.1.244 via TCP/IP" ## ## $serverVersion ## [1] "5.7.23" ## ## $protocolVersion ## [1] 10 ## ## $threadId ## [1] 465075 ## ## $rsId ## list()
# 列出連接下所有表 dbListTables(con)
## [1] "city" "result" ## [3] "t_json" "tb_newChiller"
創(chuàng)建表
dbCreateTable函數(shù)創(chuàng)建表
# 方法1:字符向量 dbCreateTable(con,'table1',fields =c("id"='int',"value"="float")) # 方法2:數(shù)據(jù)框 dbCreateTable(con,'table2',fields = mtcars)
注意點:
- 設(shè)置fields參數(shù)時,用命名的字符向量(名字為字段名,值為字段數(shù)據(jù)類型)或數(shù)據(jù)框表示
- 表只能創(chuàng)建一次,重復創(chuàng)建會報錯。
sql語句創(chuàng)建表
運行dbSendQuery函數(shù),調(diào)用sql語句創(chuàng)建表,該函數(shù)返回一個RMySQLResult類。該方法可以重復運行,不會報錯。
# 方法3:sql語句 dbSendQuery(con,'create table if not exists table3(id int,value float)')
## <MySQLResult:11,5,3>
讀取表
dbReadTable函數(shù)讀取表
# 先設(shè)置編碼(windows) dbSendQuery(con,'set names gbk') ## <MySQLResult:11,5,4>
# 讀取完整表 dbReadTable(con,'city') ## id name city_code ## 1 1 北京 000001 ## 2 4 南京 000002 ## 3 7 廣州 000003 ## 4 10 上海 000004 ## 5 11 深圳 000005 ## 6 13 蘇州 000006
注意點:
- 返回的是整個表的數(shù)據(jù)
- 為解決中文顯示問題,若運行R的操作系統(tǒng)為window,需要設(shè)置編碼為gbk,為Linux則需要設(shè)置為utf8
- 返回的數(shù)據(jù)格式為data.frame
sql語句讀取表
通過運行dbGetQuery或dbSendQuery函數(shù),調(diào)用sql語句讀取表。
dbGetQuery函數(shù)運行sql語句,返回data.frame??梢栽趕ql語句中編寫篩選語句。
# 讀取完整表 dbGetQuery(con,'select * from city') ## id name city_code ## 1 1 北京 000001 ## 2 4 南京 000002 ## 3 7 廣州 000003 ## 4 10 上海 000004 ## 5 11 深圳 000005 ## 6 13 蘇州 000006
# 讀取篩選的表 dbGetQuery(con,'select id,name from city where id > 10') ## id name ## 1 11 深圳 ## 2 13 蘇州
dbSendQuery函數(shù)運行sql語句,返回MySQLResult類。對該類使用dbFetch函數(shù),可以篩選行,返回data.frame。用完后需要用dbClearResult函數(shù)清理結(jié)果。
# 篩選前3行數(shù)據(jù) res <- dbSendQuery(con,'select * from city') dbFetch(res,3) ## id name city_code ## 1 1 北京 000001 ## 2 4 南京 000002 ## 3 7 廣州 000003
dbClearResult(res) ## [1] TRUE
寫入表
dbWriteTable函數(shù)寫入表
# 寫入表 dbWriteTable(con,"iris",iris,row.names=FALSE,append=TRUE)
## [1] TRUE
注意點:
- 第一次寫入時,若數(shù)據(jù)庫中無該表,會根據(jù)表名自動創(chuàng)建
- 重復寫入時,需要設(shè)置寫入行為:
參數(shù)設(shè)置 | 解釋 |
---|---|
append=TRUE | 追加寫入,新數(shù)據(jù)在原數(shù)據(jù)行末添加 |
overwrite=TRUE | 覆蓋寫入,新數(shù)據(jù)覆蓋原數(shù)據(jù) |
row.names=FALSE | 不寫入數(shù)據(jù)框的行名 |
- append和overwrite兩個參數(shù)不能同時設(shè)置為TRUE。
sql語句插入數(shù)據(jù)
運行dbSendStatment函數(shù),調(diào)用sql語句插入數(shù)據(jù)。
dbSendStatement(con,'insert into table1 values(1,12)') ## <MySQLResult:1701147206,5,12>
注意點:
- 重復運行會重復插入數(shù)據(jù)
刪除表
用dbRemoveTable函數(shù)刪除表。
# 刪除表 dbRemoveTable(con,'table1') ## [1] TRUE dbRemoveTable(con,'table2') ## [1] TRUE dbRemoveTable(con,'table3') ## [1] TRUE dbRemoveTable(con,'iris') ## [1] TRUE
完成所有的操作后,需要關(guān)閉連接。
# 關(guān)閉連接 dbDisconnect(con) ## [1] TRUE
到此這篇關(guān)于R語言實現(xiàn)操作MySQL數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)R語言操作MySQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
R語言繪圖數(shù)據(jù)可視化pie?chart餅圖
這篇文章主要介紹了R語言繪圖數(shù)據(jù)可視化pie?chart餅圖,教大家如何用R語言來畫大餅,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02R包制作后出現(xiàn)not available for錯誤問題解決解決
這篇文章主要為大家介紹了R包制作后出現(xiàn)not available for...錯誤的問題解決方式,有需要的朋友,可以借鑒參考下,希望能夠有所幫助2021-11-11