Pandas to_sql詳解

  • 源碼:
def to_sql(
        self,
        name,
        con,
        schema=None,
        if_exists="fail",
        index=True,
        index_label=None,
        chunksize=None,
        dtype=None,
        method=None,
    ):
  • 函數功能: 將存儲在DataFrame中的記錄寫入SQL數據庫。
  • 參數:
    • name:要寫入的表的名字
    • con:創建數據庫連接的對象。僅支持由sqlalchemy.engine.Enginesqlite3.Connection創建的連接
    • schema:用於創建數據庫對象,基本上都是使用默認值。參考
    • if_exists:如果表存在怎麼辦?
      • fail:拋出ValueError異常
      • replace:在插入數據之前刪除表。注意不是僅刪除數據,是刪除原來的表,重新建表哦。
      • append:插入新數據。如果有主鍵,要避免主鍵衝突;看清表的格式,DataFrame的columns與表的columns是對應的;DF的index默認是作爲一列數據的,也就是說默認會寫入數據庫的,下面仔細介紹:
    • index:將索引作爲一列寫入數據庫,默認爲True,也就是說默認DF的索引是要寫入數據庫的index_label爲列名
    • index_label:將索引寫入數據庫時的列名,默認爲index;如果DF是多級索引,則index_label應爲一個序列
    • chunksize:批處理,每次處理多少條數據。默認全部,一般沒啥用,除非數據量太大,明顯感覺卡的時候可以分批處理。
    • dtype:一個字典,指定列的數據類型。鍵是列的名字,值是sqlalchemy types或者sqlite3的字符串形式。如果是新建表,則需要指定類型,不然會以存儲量最大類型作爲默認類型。比如varchar類型就會成爲text類型,空間資源浪費很多。如果是添加數據,則一般不需要規定該參數。sqlclchemy的類型基本都在sqlalchemy.types及sqlalchemy模塊下,比如:sqlalchemy.types.INT、 sqlalchemy.INT
    • method:哪種類型的插入語句?
      • None:默認單行插入
      • ‘multi’:多行插入
      • callable:以回調函數插入,寫函數的名字,沒用過。
  • 實例:較多的時候我們只想添加一些數據,以添加數據爲例
    user表:id自增主鍵
id name
1
2
3

添加一些數據:

import pandas as pd
from sqlalchemy import create_engine

df = pd.DataFrame([["四"], ["五"], ["六"]], columns=['name'])

# 創建Engine實例
engine = create_engine("mysql+pymysql://root:root@localhost:3306/test")
# 創建數據庫連接
con = engine.connect()

df.to_sql('user', con, if_exists="append", index=False)

結果:

id name
1
2
3
4
5
6

【sqlalchemy的使用】參考

# 創建Engine實例
engine = create_engine("dialect+driver://username:password@host:port/database")
# 創建數據庫連接
con = engine.connect()

dialect:方言,用於指定哪種數據庫,比如:mysql
driver:驅動,用於連接數據庫的驅動,不同數據庫的驅動不一樣。以mysql爲例,有:pymysql、mysqldb
username:用戶名,比如:root
password:密碼,比如:123456
host:主機,比如:localhost
port:端口,比如:3306
database:數據庫名字,比如:test
例:engine = create_engine("mysql+pymysql://root:123456@localhost:3306/test")

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章