用法:
DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None, method=None)
將存儲在DataFrame 中的記錄寫入 SQL 數據庫。
支持 SQLAlchemy [1] 支持的數據庫。可以新創建、附加或覆蓋表。
- name:str
SQL 表的名稱。
- con:sqlalchemy.engine(引擎或連接)或 sqlite3.Connection
使用 SQLAlchemy 可以使用該庫支持的任何數據庫。為 sqlite3.Connection 對象提供了舊版支持。用戶負責 SQLAlchemy 可連接的引擎處理和連接關閉,請參閱這裏。
- schema:str,可選
指定架構(如果數據庫風格支持此)。如果沒有,使用默認模式。
- if_exists:{‘fail’, ‘replace’, ‘append’},默認 ‘fail’
如果表已經存在,如何表現。
失敗:引發ValueError
替換:在插入新值之前刪除表。
append:向現有表中插入新值。
- index:布爾值,默認為真
將DataFrame 索引寫為一列。使用
index_label
作為表中的列名。- index_label:str 或序列,默認無
索引列的列標簽。如果給出 None(默認)並且
index
為 True,則使用索引名稱。如果DataFrame 使用MultiIndex,則應給出一個序列- chunksize:int 可選
指定每次要寫入的每批中的行數。默認情況下,將一次寫入所有行。
- dtype:dict或標量,可選
指定列的數據類型。如果使用字典,鍵應該是列名,值應該是 SQLAlchemy 類型或 sqlite3 舊模式的字符串。如果提供了標量,它將應用於所有列。
- method:{無,‘multi’,可調用},可選
控製使用的 SQL 插入子句:
無:使用標準 SQL
INSERT
子句(每行一個)。‘multi’:在單個
INSERT
子句中傳遞多個值。可使用簽名
(pd_table, conn, keys, data_iter)
調用。
詳細信息和示例可調用實現可以在部分插入方法中找到。
- 無或int
受to_sql 影響的行數。如果傳遞給
method
的可調用對象不返回行數,則返回無。受影響的返回行數是
sqlite3.Cursor
或 SQLAlchemy 可連接的rowcount
屬性的總和,這可能無法反映 sqlite3 或 SQLAlchemy 中規定的寫入行的確切數量。
- ValueError
當表已存在且
if_exists
為‘fail’(默認值)時。
參數:
返回:
拋出:
注意:
如果數據庫支持,時區感知日期時間列將使用 SQLAlchemy 編寫為
Timestamp with timezone
類型。否則,日期時間將存儲為原始時區本地的時區未知時間戳。參考:
例子:
創建一個內存 SQLite 數據庫。
>>> from sqlalchemy import create_engine >>> engine = create_engine('sqlite://', echo=False)
從頭開始創建一個包含 3 行的表。
>>> df = pd.DataFrame({'name' : ['User 1', 'User 2', 'User 3']}) >>> df name 0 User 1 1 User 2 2 User 3
>>> df.to_sql('users', con=engine) 3 >>> engine.execute("SELECT * FROM users").fetchall() [(0, 'User 1'), (1, 'User 2'), (2, 'User 3')]
sqlalchemy.engine.Connection
也可以傳遞給con
:>>> with engine.begin() as connection: ... df1 = pd.DataFrame({'name' : ['User 4', 'User 5']}) ... df1.to_sql('users', con=connection, if_exists='append') 2
這允許支持需要相同 DBAPI 連接用於整個操作的操作。
>>> df2 = pd.DataFrame({'name' : ['User 6', 'User 7']}) >>> df2.to_sql('users', con=engine, if_exists='append') 2 >>> engine.execute("SELECT * FROM users").fetchall() [(0, 'User 1'), (1, 'User 2'), (2, 'User 3'), (0, 'User 4'), (1, 'User 5'), (0, 'User 6'), (1, 'User 7')]
僅用
df2
覆蓋表。>>> df2.to_sql('users', con=engine, if_exists='replace', ... index_label='id') 2 >>> engine.execute("SELECT * FROM users").fetchall() [(0, 'User 6'), (1, 'User 7')]
指定 dtype(對於缺少值的整數特別有用)。請注意,雖然 pandas 被迫將數據存儲為浮點數,但數據庫支持可為空的整數。當使用 Python 獲取數據時,我們會返回整數標量。
>>> df = pd.DataFrame({"A": [1, None, 2]}) >>> df A 0 1.0 1 NaN 2 2.0
>>> from sqlalchemy.types import Integer >>> df.to_sql('integers', con=engine, index=False, ... dtype={"A": Integer()}) 3
>>> engine.execute("SELECT * FROM integers").fetchall() [(1,), (None,), (2,)]
相關用法
- Python pandas.DataFrame.to_string用法及代碼示例
- Python pandas.DataFrame.to_stata用法及代碼示例
- Python pandas.DataFrame.to_numpy用法及代碼示例
- Python pandas.DataFrame.to_json用法及代碼示例
- Python pandas.DataFrame.to_xml用法及代碼示例
- Python pandas.DataFrame.to_latex用法及代碼示例
- Python pandas.DataFrame.to_pickle用法及代碼示例
- Python pandas.DataFrame.to_csv用法及代碼示例
- Python pandas.DataFrame.to_dict用法及代碼示例
- Python pandas.DataFrame.to_clipboard用法及代碼示例
- Python pandas.DataFrame.to_hdf用法及代碼示例
- Python pandas.DataFrame.to_markdown用法及代碼示例
- Python pandas.DataFrame.to_excel用法及代碼示例
- Python pandas.DataFrame.to_records用法及代碼示例
- Python pandas.DataFrame.to_parquet用法及代碼示例
- Python pandas.DataFrame.to_xarray用法及代碼示例
- Python pandas.DataFrame.to_period用法及代碼示例
- Python pandas.DataFrame.truncate用法及代碼示例
- Python pandas.DataFrame.transpose用法及代碼示例
- Python pandas.DataFrame.transform用法及代碼示例
注:本文由純淨天空篩選整理自pandas.pydata.org大神的英文原創作品 pandas.DataFrame.to_sql。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。