Pandas操作mysql數據庫!
theme: smartblue
公眾號:尤而小屋
作者:Peter
編輯:Peter
大家好,我是Peter~
本文介紹的是如何使用Pandas來操作MySQL數據庫
。主要是包含查詢MySQL中的數據,以及往數據庫中寫入數據。
先安裝兩個庫:
- pymysql
- sqlalchemy
python
pip install pymysql
pip install sqlalchemy
本地數據庫
查看一個本地數據庫中某個表的數據。這份數據是《MySQL經典50題》的一個表之一:
部分習題答案:
```sql mysql -u root -p -- 安裝mysql,進入數據庫輸入暗文密碼
show databases; -- 顯示全部數據庫 use test; -- 使用某個數據庫 show tables; -- 查看數據庫下的全部表 select * from Student; -- 查看某個表的全部內容 ```
操作MySQL
連接MySQL
以pymysql模塊為例,講解如何連接數據庫。
In [1]:
``` import pandas as pd
import pymysql from sqlalchemy import create_engine ```
In [2]:
```python connection = pymysql.connect( host='127.0.0.1', # 本機ip地址 port=3306, # mysql默認端口號 user="root", # 用户名 password="password", # 密碼 charset="utf8", # 字符集 db="test" # 數據庫 )
cur = connection.cursor() # 建立遊標 cur ```
Out[2]:
<pymysql.cursors.Cursor at 0x11ddc1190>
connect()方法常用的參數:
| connect() 常用參數 | 説明 | | ------------------ | ------ | | host | 主機ip | | user | 用户名 | | password | 密碼 | | database | 數據庫 | | port | 端口號 | | charset | 字符集 |
調用 cursor() 方法即可返回一個新的遊標對象,在連接沒有關閉之前,遊標對象可以反覆使用
執行sql查詢語句
In [3]:
```python sql=""" # 待執行的sql語句 select * from Student; """
執行sql語句
cur.execute(sql)
```
Out[3]:
8
In [4]:
cur
結果表明是個遊標對象:
Out[4]:
<pymysql.cursors.Cursor at 0x11ddc1190>
In [5]:
cur.description
主要返回遊標的屬性信息,官網的描述為:
Out[5]:
(('s_id', 253, None, 20, 20, 0, False),
('s_name', 253, None, 20, 20, 0, True),
('s_birth', 253, None, 20, 20, 0, True),
('s_sex', 253, None, 20, 20, 0, True))
In [6]:
```python
列名
columns = [col[0] for col in cur.description] columns ```
Out[6]:
['s_id', 's_name', 's_birth', 's_sex']
遊標使用
下圖顯示的是如何取出一條或者多條數據(按照順序查詢)
通過遊標獲取全部的數據:
fetch相關的函數都是獲取結果集中剩下的數據,多次調用的時候只會從剩餘數據中查詢:
當第二次調用的時候結果就是空集。
通過遊標獲取查詢的結果集的特點:
- 可以獲取1條、多條和全部數據
- 在獲取數據的時候是按照順序讀取的
- fetchall函數返回剩下的所有行
- 如果是末尾,則返回空元組;
- 否則返回一個元組,其元素是每一行的記錄封裝的一個元組
轉成DataFrame
```python
列名
columns = [col[0] for col in cur.description]
數據集合
data = [] for i in cur.fetchall(): data.append(i)
df = pd.DataFrame(data,columns=columns) ```
保存成CSV數據
SQL插入數據
往MySQL數據庫中插入數據:
```python import pandas as pd
import pymysql from sqlalchemy import create_engine
connection = pymysql.connect( host='127.0.0.1', # 本機ip地址 port=3306, # mysql默認端口號 user="root", # 用户名 password="11112222", # 密碼 charset="utf8", # 字符集 db="test" # 數據庫 )
cur = connection.cursor() # 建立遊標
待執行SQL語句
sql="""
insert into test.Student(s_id, s_name, s_birth, s_sex) values("09","吳越","1998-08-08","男")
"""
執行sql語句
cur.execute(sql)
```
很關鍵一步,要記得提交,這樣最終才會寫入數據庫:
python
connection.commit()
執行SQL刪除語句
使用完之後記得關閉連接:
python
connection.close()
使用sqlalchemy
第二種常用的方法是通過sqlalchemy來連接數據庫:
連接數據庫
```python import pandas as pd from sqlalchemy import create_engine
依次填寫MySQL的用户名、密碼、IP地址、端口、數據庫名
create_engine("數據庫類型+數據庫驅動://數據庫用户名:數據庫密碼@IP地址:端口/數據庫",其他參數)
engine = create_engine("mysql+pymysql://root:password@localhost:3306/test") ```
查詢語句1
查詢語句2
寫入數據
將Pandas
中的DataFrame
寫入新的表testdf
中:
python
show tables;
使用read_sql讀取
使用Pandas自帶的read_sql函數能夠自行讀取數據,讀取上面創建的數據.
官網:http://pandas.pydata.org/docs/reference/api/pandas.read_sql.html
```python import pandas as pd from sqlalchemy import create_engine
依次填寫MySQL的用户名、密碼、IP地址、端口、數據庫名
engine = create_engine("mysql+pymysql://root:password@localhost:3306/test")
sql語句
sql4 = "select * from testdf;" df4 = pd.read_sql(sql4, engine) ```
- 基於機器學習分類算法的鋼材缺陷檢測分類
- JSON數據,Python搞定!
- 邏輯迴歸:信貸違規預測!
- kaggle實戰-腫瘤數據統計分析
- Pandas操作mysql數據庫!
- 數學公式編輯神器-Mathpix Snipping Tool
- 精選20個Pandas統計函數
- 露一手,利用Python分析房價
- 德國信貸數據建模baseline!
- Python函數傳參機制詳解
- Python爬蟲周遊全國-蘭州站
- 一道Pandas題:3種解法
- 機器學習實戰:基於3大分類模型的中風病人預測
- 利用seaborn繪製柱狀圖
- 機器學習實戰:基於MNIST數據集的二分類問題
- 基於深度學習Keras的深圳租房建模
- 機器學習高頻使用代碼片段
- Python入門:Python變量和賦值
- 深度學習框架Keras入門保姆教程
- kaggle實戰:極度不均衡的信用卡數據分析