在新版本的pandas中,上述代碼會引起警告,建議改成SQLAlchemy connectable(engine/connection),後續代碼將引入這種升級的連接方式。 ...
基於游標得操作
游標是資料庫操作的相對底層的能力。簡單的操作如下:
import mysql.connector import random host = 'localhost' user = 'root' password = '8848is8848' dbname = 'demodb' def fakedata(maxtimes): # 連接資料庫 demodb = mysql.connector.connect( host=host, user=user, password=password, database=dbname) democur = demodb.cursor() # 插入模擬出來的數據。 for _ in range(maxtimes): pm25 = random.uniform(0, 300) insertsql = f'insert into demotb(pm25) values({pm25})' democur.execute(insertsql) demodb.commit() democur.close() demodb.close() def querydata(): # 連接資料庫 demodb = mysql.connector.connect( host=host, user=user, password=password, database=dbname) democur = demodb.cursor() # 進行一個簡單的查詢,返回多個值 selsql = 'select pm25 from demotb where pm25 >50.0' democur.execute(selsql) for i in democur: print(i) demodb.commit() democur.close() demodb.close() def queryresult(): # 連接資料庫 demodb = mysql.connector.connect( host=host, user=user, password=password, database=dbname) democur = demodb.cursor() # 進行一個簡單的查詢,返回多個值 selsql = 'select max(pm25) from demotb' democur.execute(selsql) result = democur.fetchone() print(result) demodb.commit() democur.close() demodb.close() fakedata(10) querydata() queryresult()
上述操作是比較底層的,尤其是使用游標操作,只能夠是遍歷操作,然後依次處理數據。為此,需要引入更加抽象與高層的工具。
基於pandas的操作
pandas雖然字面意思是熊貓,但實際上它是一個強力的數據分析工具框架。網上對於pandas的介紹非常多,但筆者還是推薦直接看官方文檔更好。使用pandas訪問資料庫的代碼如下:
import mysql.connector import pandas as pd host = 'localhost' user = 'root' password = '8848is8848' dbname = 'demodb' def querydata(): # 連接資料庫 demodb = mysql.connector.connect( host=host, user=user, password=password, database=dbname) # 進行一個簡單的查詢,返回多個值 selsql = 'select pm25 from demotb where pm25 >50.0' listpd = pd.read_sql(selsql, demodb) demodb.close() print(listpd) querydata()
此時返回的輸出結果如下所示:
pm25
0 80.6221
1 192.4580
2 291.4450
3 279.8550
4 92.3528
5 107.4040
6 144.2040
7 213.5120
8 226.6060
如下所示,pandas使用DataFrame來管理記錄,其輸出本身就具有表格的特性,與資料庫表也很相似,理解與操作起來非常方便。
在新版本的pandas中,上述代碼會引起警告,建議改成SQLAlchemy connectable(engine/connection),後續代碼將引入這種升級的連接方式。