- 源碼:
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.Engine
與sqlite3.Connection
創建的連接schema
:用於創建數據庫對象,基本上都是使用默認值。參考if_exists
:如果表存在怎麼辦?- fail:拋出
ValueError
異常 - replace:在插入數據之前刪除表。
注意不是僅刪除數據,是刪除原來的表,重新建表哦。
- append:插入新數據。
如果有主鍵,要避免主鍵衝突;看清表的格式,DataFrame的columns與表的columns是對應的;DF的index默認是作爲一列數據的,也就是說默認會寫入數據庫的,下面仔細介紹:
- fail:拋出
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")