當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python pandas.Series.to_sql用法及代碼示例


用法:

Series.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None, method=None)

將存儲在DataFrame 中的記錄寫入 SQL 數據庫。

支持 SQLAlchemy [1] 支持的數據庫。可以新創建、附加或覆蓋表。

參數

namestr

SQL 表的名稱。

consqlalchemy.engine(引擎或連接)或 sqlite3.Connection

使用 SQLAlchemy 可以使用該庫支持的任何數據庫。為 sqlite3.Connection 對象提供了舊版支持。用戶負責 SQLAlchemy 可連接的引擎處理和連接關閉,請參閱這裏

schemastr,可選

指定架構(如果數據庫風格支持此)。如果沒有,使用默認模式。

if_exists{‘fail’, ‘replace’, ‘append’},默認 ‘fail’

如果表已經存在,如何表現。

  • 失敗:引發ValueError

  • 替換:在插入新值之前刪除表。

  • append:向現有表中插入新值。

index布爾值,默認為真

將DataFrame 索引寫為一列。使用index_label 作為表中的列名。

index_labelstr 或序列,默認無

索引列的列標簽。如果給出 None(默認)並且 index 為 True,則使用索引名稱。如果DataFrame 使用MultiIndex,則應給出一個序列

chunksizeint 可選

指定每次要寫入的每批中的行數。默認情況下,將一次寫入所有行。

dtypedict或標量,可選

指定列的數據類型。如果使用字典,鍵應該是列名,值應該是 SQLAlchemy 類型或 sqlite3 舊模式的字符串。如果提供了標量,它將應用於所有列。

method{無,‘multi’,可調用},可選

控製使用的 SQL 插入子句:

  • 無:使用標準 SQL INSERT 子句(每行一個)。

  • ‘multi’:在單個 INSERT 子句中傳遞多個值。

  • 可使用簽名 (pd_table, conn, keys, data_iter) 調用。

詳細信息和示例可調用實現可以在部分插入方法中找到。

返回

無或int

受to_sql 影響的行數。如果傳遞給method 的可調用對象不返回行數,則返回無。

受影響的返回行數是 sqlite3.Cursor 或 SQLAlchemy 可連接的 rowcount 屬性的總和,這可能無法反映 sqlite3SQLAlchemy 中規定的寫入行的確切數量。

拋出

ValueError

當表已存在且if_exists 為‘fail’(默認值)時。

注意

如果數據庫支持,時區感知日期時間列將使用 SQLAlchemy 編寫為 Timestamp with timezone 類型。否則,日期時間將存儲為原始時區本地的時區未知時間戳。

參考

pandas.Series.to_sql

https://docs.sqlalchemy.org

2

https://www.python.org/dev/peps/pep-0249/

例子

創建一個內存 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,)]

相關用法


注:本文由純淨天空篩選整理自pandas.pydata.org大神的英文原創作品 pandas.Series.to_sql。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。