R語(yǔ)言實(shí)現(xiàn)操作MySQL數(shù)據(jù)庫(kù)
用R語(yǔ)言做數(shù)據(jù)分析時(shí),常常需要從多種數(shù)據(jù)源取數(shù)據(jù),其中數(shù)據(jù)庫(kù)是非常常見(jiàn)的數(shù)據(jù)源。用R操作MySQL數(shù)據(jù)庫(kù),可以說(shuō)是數(shù)據(jù)分析師必備的技能了,本文介紹RMySQL包,可以在R語(yǔ)言中對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查的操作。
軟件版本
- win10 64bit
- r3.6.1
- rstudio 1.2
- RMySQL 0.10.20
安裝包
install.packages('RMySQL')
創(chuàng)建連接
用dbConnect函數(shù)創(chuàng)建連接,驅(qū)動(dòng)類(lèi)型設(shè)置為MySQL(),用戶(hù)名user、密碼password、主機(jī)host、端口port、數(shù)據(jù)庫(kù)dbname這些參數(shù)需要根據(jù)實(shí)際情況修改,其中端口port默認(rèn)值是3306。
# 加載包 library(RMySQL) # 創(chuàng)建連接 con <- dbConnect(MySQL(), user="root", password="xxx", host="192.168.1.244", port=3306, dbname="test")
還可以通過(guò)一些命令,查看連接的相關(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)
注意點(diǎn):
- 設(shè)置fields參數(shù)時(shí),用命名的字符向量(名字為字段名,值為字段數(shù)據(jù)類(lèi)型)或數(shù)據(jù)框表示
- 表只能創(chuàng)建一次,重復(fù)創(chuàng)建會(huì)報(bào)錯(cuò)。
sql語(yǔ)句創(chuàng)建表
運(yùn)行dbSendQuery函數(shù),調(diào)用sql語(yǔ)句創(chuàng)建表,該函數(shù)返回一個(gè)RMySQLResult類(lèi)。該方法可以重復(fù)運(yùn)行,不會(huì)報(bào)錯(cuò)。
# 方法3:sql語(yǔ)句 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
注意點(diǎn):
- 返回的是整個(gè)表的數(shù)據(jù)
- 為解決中文顯示問(wèn)題,若運(yùn)行R的操作系統(tǒng)為window,需要設(shè)置編碼為gbk,為L(zhǎng)inux則需要設(shè)置為utf8
- 返回的數(shù)據(jù)格式為data.frame
sql語(yǔ)句讀取表
通過(guò)運(yùn)行dbGetQuery或dbSendQuery函數(shù),調(diào)用sql語(yǔ)句讀取表。
dbGetQuery函數(shù)運(yùn)行sql語(yǔ)句,返回data.frame??梢栽趕ql語(yǔ)句中編寫(xiě)篩選語(yǔ)句。
# 讀取完整表 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ù)運(yùn)行sql語(yǔ)句,返回MySQLResult類(lèi)。對(duì)該類(lèi)使用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
寫(xiě)入表
dbWriteTable函數(shù)寫(xiě)入表
# 寫(xiě)入表 dbWriteTable(con,"iris",iris,row.names=FALSE,append=TRUE)
## [1] TRUE
注意點(diǎn):
- 第一次寫(xiě)入時(shí),若數(shù)據(jù)庫(kù)中無(wú)該表,會(huì)根據(jù)表名自動(dòng)創(chuàng)建
- 重復(fù)寫(xiě)入時(shí),需要設(shè)置寫(xiě)入行為:
參數(shù)設(shè)置 | 解釋 |
---|---|
append=TRUE | 追加寫(xiě)入,新數(shù)據(jù)在原數(shù)據(jù)行末添加 |
overwrite=TRUE | 覆蓋寫(xiě)入,新數(shù)據(jù)覆蓋原數(shù)據(jù) |
row.names=FALSE | 不寫(xiě)入數(shù)據(jù)框的行名 |
- append和overwrite兩個(gè)參數(shù)不能同時(shí)設(shè)置為T(mén)RUE。
sql語(yǔ)句插入數(shù)據(jù)
運(yùn)行dbSendStatment函數(shù),調(diào)用sql語(yǔ)句插入數(shù)據(jù)。
dbSendStatement(con,'insert into table1 values(1,12)') ## <MySQLResult:1701147206,5,12>
注意點(diǎn):
- 重復(fù)運(yùn)行會(huì)重復(fù)插入數(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語(yǔ)言實(shí)現(xiàn)操作MySQL數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)R語(yǔ)言操作MySQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決R語(yǔ)言安裝時(shí)出現(xiàn)輯程包不存在的問(wèn)題
這篇文章主要介紹了解決R語(yǔ)言安裝時(shí)出現(xiàn)輯程包不存在的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04R語(yǔ)言實(shí)現(xiàn)地理加權(quán)回歸(GWR)
這篇文章主要為大家介紹了R語(yǔ)言實(shí)現(xiàn)地理加權(quán)回歸(GWR)操作流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10R語(yǔ)言學(xué)習(xí)之字符串和時(shí)間格式化詳解
這篇文章主要為大家詳細(xì)介紹了R語(yǔ)言中字符串和時(shí)間格式化的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03R語(yǔ)言 實(shí)現(xiàn)在循環(huán)中輸出圖片的操作
這篇文章主要介紹了R語(yǔ)言 實(shí)現(xiàn)在循環(huán)中輸出圖片的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04R語(yǔ)言繪圖數(shù)據(jù)可視化pie?chart餅圖
這篇文章主要介紹了R語(yǔ)言繪圖數(shù)據(jù)可視化pie?chart餅圖,教大家如何用R語(yǔ)言來(lái)畫(huà)大餅,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02R包制作后出現(xiàn)not available for錯(cuò)誤問(wèn)題解決解決
這篇文章主要為大家介紹了R包制作后出現(xiàn)not available for...錯(cuò)誤的問(wèn)題解決方式,有需要的朋友,可以借鑒參考下,希望能夠有所幫助2021-11-11R語(yǔ)言中set.seed()函數(shù)的作用詳解
set.seed()括號(hào)里面的參數(shù)可以是任意數(shù)字,是代表你設(shè)置的第幾號(hào)種子而已,不會(huì)參與運(yùn)算,是個(gè)標(biāo)記而已。,這篇文章主要介紹了R語(yǔ)言中set.seed()函數(shù)的作用,需要的朋友可以參考下2022-09-09詳解R語(yǔ)言實(shí)現(xiàn)前向逐步回歸(前向選擇模型)
本文主要介紹了詳解R語(yǔ)言實(shí)現(xiàn)前向逐步回歸,從實(shí)現(xiàn)原理開(kāi)始,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08