pandas 讀寫sql數據庫


如何從數據庫中讀取數據到DataFrame中?pandas提供這這樣的接口完成此工作——read_sql()。下面我們用離子來說明這個方法。

  1. 我們要從sqlite數據庫中讀取數據,引入相關模塊

  2. read_sql接受兩個參數,一個是sql語句,這個你可能需要單獨學習;一個是con(數據庫連接)、read_sql直接返回一個DataFrame對象

  3. 打印一下,可以看到已經成功的讀取了數據

  4. 我們還可以使用index_col參數來規定將那一列數據設置為index

  5. 結果輸出為:

  6. 當然,我們可以設置多個index,只要將index_col的值設置為列表

  7. 輸出結果為:

  8. 寫入數據庫也很簡單,下面第二句用於刪除數據庫中已有的表"weather_2012",然后將df保存到數據庫中的"weather_2012"表

  9. 假如我們使用的是mysql數據庫也沒問題,我們只需要建立與mysql的連接即可,用下面的con代替上面的con可以達到的效果相同。

補充:

(1)DateFrane 可以將結果轉換成DataFrame

import pandas as pd
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='db1')
cursor = conn.cursor()
# cursor.execute("DROP TABLE IF EXISTS test")#必須用cursor才行

sql = "select * from user"
df = pd.read_sql(sql,conn,)
aa=pd.DataFrame(df)
print aa
DataFrame 可以將結果轉換成DataFrame

(2)存儲

pd.io.sql.write_frame(df, "user_copy", conn)#不能用已經移除

pd.io.sql.to_sql(piece, "user_copy", conn,flavor='mysql',if_exists='replace')#必須制定flavor='mysql'

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pandas as pd
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='db1')
cursor = conn.cursor()
# cursor.execute("DROP TABLE IF EXISTS user_copy")#必須用cursor才行

sql = "select * from user"
df = pd.read_sql(sql,conn,chunksize=2)
for piece in df:
    aa=pd.DataFrame(piece)
    # pd.io.sql.write_frame(df, "user_copy", conn)#不能用已經移除
    pd.io.sql.to_sql(piece, "user_copy", conn,flavor='mysql',if_exists='replace')#必須制定flavor='mysql'
從一個數據庫讀取存儲到另一個數據庫

 (3)根據條件添加一列數據

piece['xb'] = list(map(lambda x: '男' if x == '123' else '女', piece['pwd']))

(4)如果有漢字,鏈接時必須知道字符類型   charset="utf8"

(5)最后實現代碼(迭代讀取數據,根據一列內容新增一列,)

 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pandas as pd
import pymysql
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='db1',charset="utf8")
cursor = conn.cursor()
# cursor.execute("DROP TABLE IF EXISTS user_copy")#必須用cursor才行

sql = "select * from user"
df = pd.read_sql(sql,conn,chunksize=2)
for piece in df:
    # pd.io.sql.write_frame(df, "user_copy", conn)#不能用已經移除

    piece['xb'] = list(map(lambda x: '' if x == '123' else '', piece['pwd']))
    print(piece)

    pd.io.sql.to_sql(piece, "user_copy", conn,flavor='mysql',if_exists='append')#必須制定flavor='mysql'
最后代碼

 

 (7)sqlalchemy鏈接  需要制定一些中文 create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/jd?charset=utf8", max_overflow=5)

# 用sqlalchemy鏈接
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/db1?charset=utf8")
sql = "select * from user"
df = pd.read_sql(sql,engine,chunksize=2)
for piece in df:
    print(piece)
    pd.io.sql.to_sql(piece, "user_copy", engine, flavor='mysql', if_exists='append')
sqlalchemy鏈接

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM