參考內容:
RMySQL數據庫編程指南
R語言使用RMySQL連接及讀寫Mysql數據庫
RMySql包安裝和加載優點問題,試着根據提示簡單安裝和加載可以使用,后續再查詢資料解決。
3.2.1 連接數據庫
dbConnect(MySQL(),host="localhost",dbname,user="",password="", ...)
library(RMySql)
#可能是安裝RMySQL的問題,導致直接library(RMySql)提示不存在RMySql包,通過下列方式可以加載成功(又挖一個坑...) library("RMySQL", lib.loc="/Library/Frameworks/R.framework/Versions/3.3/Resources/library") # Quark con <- dbConnect(MySQL(),host="localhost",dbname="Quark",user="root",password="root") #獲取連接信息,查看database下所有表 summary(con) dbGetInfo(con) dbListTables(con) #斷開連接 dbDisconnect(con)
3.2.2 寫入數據
dbWriteTable(conn, name, value, row.names=T...)
-
append=T 在數據庫中原表的基礎上追加
-
overwrite=T 覆蓋數據庫中的原表
testA <-data.frame(id=1:6,e=c("a","b","c","d","e","f"),c=c("我","的","世","界","變","得")) testB <-data.frame(id=7:13,e=c("g","h","i","j","k","l","m"),c=c("奇","妙","跟","難","以","言","喻")) #直接寫testA寫入test表中 dbWriteTable(con,"test",testA,row.names=T) dbReadTable(con,"test") #追加寫testB追加在test表后 dbWriteTable(con,"test",testB,append=T,row.names=F) dbReadTable(con,"test") #覆蓋寫testB覆蓋test表 dbWriteTable(con,"test",testB,overwrite=T,row.names=F) dbReadTable(con,"test") fruits <-data.frame(id=1:5,name=c("蘋果","香蕉","梨子","玉米","西瓜"),price=c(8.8,4.98,7.8,6,2.1),status=c("無","打折","無","售罄","批發")) dbListTables(con) dbWriteTable(con,"fruits",fruits,overwrite=T,row.names=F) dbReadTable(con,"fruits")
3.2.3 讀取數據
向數據庫提交查詢,並返回結果。
-
dbReadTable(conn, name, ...) 直接獲得所讀取表的全部數據
-
dbGetQuery(conn, statement, ...) 通過sql語句查詢數據
#讀數據庫 #解決中文亂碼問題 #dbSendQuery(con,'SET NAMES uft8') dbReadTable(con,"test") #用SQL語句查詢dbGetQuery()和dbSendQuery()兩種方法 dbGetQuery(con, "SELECT * FROM test limit 3") res <- dbSendQuery(con, "SELECT * FROM test") data <- dbFetch(res, n=2) #取前2條數據,n=-1時是獲取所有數據 data data <- dbFetch(res, n=-1) #取余下所有數據 data dbClearResult(res)
用SQL語句批量查詢,client.flag設置這樣支持批量查詢
con <- dbConnect(MySQL(),host="localhost",dbname="Quark",user="root",password="root",client.flag= CLIENT_MULTI_STATEMENTS) #client.flag設置這樣支持批量查詢 #dbSendQuery(con,'SET NAMES uft-8') sql <- "SELECT * FROM fruits;SELECT * FROM test" res1 <- dbSendQuery(con,sql) dbFetch(res1, n = -1) if (dbMoreResults(con)) { res2 <- dbNextResult(con) dbFetch(res2, n = -1) } dbListResults(con) dbClearResult(res1) dbClearResult(res2)
3.2.3 刪除表
dbRemoveTable(con,"test")
