当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。