MySQL基礎入門——MySQL與R語言、Python交互

MySQL作為z最為流行的關係型資料庫管理平台之一,與絕大多數數據分析工具或者編程語言都有介面,今天這一篇分享如何將MySQL與R語言、Python進行連接。

R語言中與SQL管理平台通訊的介麵包有很多,可以根據自己使用的資料庫平台類型以及習慣,挑選合適的介麵包。因為我個人筆記本使用的MySQL平台,所以本篇僅以MySQL為例分享。(如果你需要其他平台的介面導入方案,可以直接在csdn博客上搜關鍵字,有很多博客資料可以參考)。

我習慣使用的介麵包是RMySQL,裡面的核心函數主要涉及資料庫連接,數據讀寫,數據查詢三個方面,以下是三個方面的內容實例。

R與資料庫的連接: library(「RMySQL」)

library(「magrittr」)

資料庫連接語句:

conn <- dbConnect( MySQL(), #資料庫平台類型 dbname=」db1」, #資料庫名稱 username=」root」, #登錄賬號(MySQL初始安裝時設置的賬號) password=」**「, #登錄密碼(MySQL初始安裝時設置的密碼) host=」127.0.0.1」, #地址 port=3306 #埠號 )summary(conn) #查看連接信息:User: root Host: 127.0.0.1 Dbname: db1 Connection type: 127.0.0.1 via TCP/IPdbGetInfo(conn) #查看連接詳細信息(列表形式) $host『127.0.0.1』$user『root』$dbname『db1』$conType『127.0.0.1 via TCP/IP』$serverVersion『5.7.17-log』$protocolVersion10$threadId11$rsId dbListTables(conn) #查看該資料庫連接內的表信息 『birthdays』 『company』 『dataanalyst』 『foodranking』 『foodtypes』 『orderinfo』 『str_date』 『userinfo』dbDisconnect(conn) #關閉連接(數據通訊完成之後再運行)R語言與MySQL資料庫讀寫:(mydata <- iris)dbWriteTable( conn = conn, #連接名稱 name = "mydata", #指定導入後的表名 value = iris, #指定要導入的R內存空間數據對象 row.names = FALSE #忽略行名 ) #寫表dbListTables(conn)"birthdays" "company" "dataanalyst" "foodranking" "foodtypes" "mydata" "orderinfo" "str_date" "userinfo"mydata1 <- dbReadTable( conn = conn, #連接名稱 name = "mydata" #資料庫中的表名 ) #讀表 head(mydata1,10)

以上讀寫都是一次性操作,不能在讀寫的同時執行條件篩選等步驟,通常我們需要使用查詢方式來獲取指定條件的數據並返回數據框。

result1 <- dbSendQuery(conn = conn, statement = "SELECT * from mydata where `Sepal.Length` between 4 and 5 and Species = "setosa" " #查詢條件 ) %>% dbFetch() #將查詢結果返回數據框head(result1,10)dbClearResult(result1) #清除查詢(釋放內存)

這一句清除的是查詢,即上一句中的dbSendQuery部分(布包含後面的dbFetch,我只是為了方便一次性輸出了)。

dbRemoveTable(conn,"mydata") #刪除表 dbListTables(conn) "birthdays" "company" "dataanalyst" "foodranking" "foodtypes" "orderinfo" "str_date" "userinfo"dbDisconnect(conn) #斷開連接

Python:

Python與MySQL連接:

from sklearn.datasets import load_irisimport pandas as pd from sqlalchemy import create_engineimport MySQLdbconn=MySQLdb.connect( host="localhost", #地址 user="root", #登錄名(同上) passwd="******", #登錄密碼(同上) db="db1", #要連接的資料庫名稱 charset="utf8" #聲明數據編碼 )engine = create_engine("mysql+mysqldb://root:password@localhost:3306/db1?charset=utf8")#使用 sqlalchemy介面連接連接

Python與MySQL數據讀寫操作:

Pandas庫中有封裝過的數據讀寫函數,可以直接針對連接後的數據進行數據讀寫,非常方便。

iris = load_iris()mydata = pd.DataFrame( iris.data[:,:], columns=["sepal_length","sepal_width","petal_length","petal_width"] )mydata.head(10)#將數據框直接寫入MySQLmydata.to_sql( name = "iris", con = engine )#直接讀取MySQL中的表:mydata1 = pd.read_sql_table( table_name= "str_date", con =engine )#通過查詢過濾條件獲取表數據:mydata1 = pd.read_sql_query( sql = "SELECT * from iris where sepal_length between 4 and 5 and petal_width != 0.2 ", con =engine )

你可以通過以上MySQLlb介面建立的連接來執行查詢操作!

cursor = conn.cursor() #獲取操作游標 sql = "SELECT * from iris where sepal_length between 4 and 5 and petal_width != 0.2"cursor.execute(sql) # 使用execute方法執行SQL語句cursor.fetchall() #獲取查詢數據cursor.close() # 關閉游標conn.close() # 關閉資料庫連接

總覺得MySQLlb的介面使用起來過於複雜,不直觀,輸出數據也不友好,還好pandas支持sqlalchemy的鏈接,使用pandas裡面的函數可以基本滿足寫表、讀表、執行查詢的需要。

以上僅僅是MySQL與R語言、Python交互的基礎函數,當然還有更為複雜的增刪以及插入命令,如果需要了解詳細內容可以參考RMySQL、sqlalchemy庫的官方文檔。

在線課程請點擊文末原文鏈接:

Hellobi Live | R語言可視化在商務場景中的應用

往期案例數據請移步本人GitHub: github.com/ljtyduyu/Dat


推薦閱讀:

R markdown 連接mysql數據
一觸即發,2017年,資料庫世界的諸神之戰
mysql注入篇
phxsql如何編譯?

TAG:MySQL | R编程语言 | Python |