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


Python dask.dataframe.to_sql用法及代碼示例


用法:

dask.dataframe.to_sql(df, name: str, uri: str, schema=None, if_exists: str = 'fail', index: bool = True, index_label=None, chunksize=None, dtype=None, method=None, compute=True, parallel=False, engine_kwargs=None)

將 Dask Dataframe 存儲到 SQL 表

根據“meta”DataFrame(並符合調用者的“if_exists”首選項)創建一個空表,然後每個塊調用pd DataFrameto_sql(帶有if_exists=”append”)。

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

參數

namestr

SQL 表的名稱。

uristring

數據庫連接的完整 sqlalchemy URI

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) 調用。

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

compute布爾值,默認為真

如果為真,則調用dask.compute 並執行加載到 SQL 中;否則,返回 Dask 對象(或當 parallel=True 時的 per-block 對象數組)

parallel布爾值,默認為 False

如果為 true,則讓每個塊同時將自身附加到 DB 表中。這可能導致 DB 行的順序與源 DataFrame 的相應行不同。為 false 時,將每個塊按順序加載到 SQL DB 中。

engine_kwargsdict 或 None

sqlalchemy 的特定數據庫引擎參數

拋出

ValueError

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

注意

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

參考

1

https://docs.sqlalchemy.org

2

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

例子

從頭開始創建一個有 4 行的表。

>>> import pandas as pd
>>> df = pd.DataFrame([ {'i':i, 's':str(i)*2 } for i in range(4) ])
>>> from dask.dataframe import from_pandas
>>> ddf = from_pandas(df, npartitions=2)
>>> ddf  
Dask DataFrame Structure:
                   i       s
npartitions=2
0              int64  object
2                ...     ...
3                ...     ...
Dask Name: from_pandas, 2 tasks
>>> from dask.utils import tmpfile
>>> from sqlalchemy import create_engine
>>> with tmpfile() as f:
...     db = 'sqlite:///%s' %f
...     ddf.to_sql('test', db)
...     engine = create_engine(db, echo=False)
...     result = engine.execute("SELECT * FROM test").fetchall()
>>> result
[(0, 0, '00'), (1, 1, '11'), (2, 2, '22'), (3, 3, '33')]

相關用法


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