讀寫數據庫
大多數情況下,海量的數據是使用數據庫進行數據庫進行存儲的,這主要是依賴于數據庫的數據結構化、數據共享性、獨立性等特點。因此,在實際生產環境中,絕大多數的數據都是存儲在數據庫中。pandas支持MySQL、Oracle、SQLite等主流數據庫的讀寫操作。
為了高效地對數據庫中的數據進行讀取,這里需要引入SQLAlchemy。SQLAlchemy是使用Python/ target=_blank class=infotextkey>Python編寫的一款開源軟件,它提供的SQL工具包和對象映像工具能夠高效地訪問數據庫。在使用SQLAlchemy時需要使用相應的連接工具包,比如MySQL需要安裝mysqlconnector,Oracle則需要安裝cx_oracle。
這里簡單介紹幾種安裝mysqlconnector的方法
1. pip install mysql-connector
2. conda install mysql-connector
#注意如果都安裝不成功,可能是python環境或anaconda環境配置沒配好,可以試試重新安裝軟件或者配置文件
pandas.io.sql模塊常用的函數
1. read_sql_table() : 將讀取的整張數據表的數據轉換成DataFrame對象
2. read_sql_query() :將SQL語句讀取的結果轉換成DataFrame對象
3. read_sql() :上述兩個函數的結合,既可以讀數據表也可以讀SQL語句
4. to_sql():將數據寫入到SQL數據庫中
一、使用read_sql()函數讀取數據
read_sql() 函數既可以讀取整張數據表,又可以執行SQL語句,其語法格式如下:pandas.read_sql(sql,con,index_col=None,coerce_float=True,parmes=None,parse_dates=None,columns=None,chunksize=None)
常用參數的含義如下:
- sql:表示被執行的SQL語句
- con:接收數據庫連接,表示數據庫的連接信息
- index_col:默認為None,如果傳入一個列表,則表示為層次化索引
- coerce_float:將非法字符串、非數字對象的值轉換為浮點數類型
- params:傳遞給執行方法的參數列表,如params={'name':'values'}
- columns:接收list表示讀取數據的列名,默認為None
接下來,通過一個例子來演示如何使用read_sql()函數讀取數據庫中的數據表:
#上述中,首先導入了sqlalchemy模塊,通過create_engine()函數創建連接數據庫的信息,然后調用read_sql()函數讀取數據庫的student數據表,并轉換成DataFrame對象
#在使用create_engine()函數創建連接時,格式為:"數據庫類型+數據庫驅動名稱://用戶名:密碼@機器地址:端口號/數據庫名"
read_sql()函數執行sql語句時的例子:
二 、使用to_sql()方法將數據寫入數據庫中
to_sql()方法的功能是將Series和DataFrame對象以數據表的形式寫入數據庫中,語法為:to_sql(name,con,schema=None,if_exists=‘fail’,index=True,index_label=None,chunksize=None,dtype=None)
- name:表示數據庫的名稱
- con:表示數據庫的連接信息
- if_exists:可以取值為fail、replace或Append,默認為fail
每個取值代表的含義如下:
fail:如果表存在,則不執行寫入操作
replace :如果表存在,則將源數據表刪除再重新創建
append:如果表存在,那么在原數據庫表的基礎上追加數據
- index:表示是否將DataFrame行索引作為數據傳入數據庫,默認為True
- index_label:表示是否引用索引名稱。如果index設為True,此參數為None,則使用默認名稱;如果index為層次化索引,則使用序列類型
接下來,通過一個例子來演示如何使用to_sql()函數將DataFrame對象寫入到名稱為students數據表中:
#在使用to_sql()方法寫入數據庫時,如果寫入的數據表名與數據庫中其他的數據表名相同時,則返回該數據表已存在的錯誤