mars.dataframe.DataFrame.to_sql#

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 支持的数据库受到支持。可以新建表、追加表或覆盖表。

Parameters
  • name (str) – SQL 表的名称。

  • con (sqlalchemy.engine.Enginesqlite3.Connection) – 使用 SQLAlchemy 可以让你使用该库支持的任何数据库。对于 sqlite3.Connection 对象提供了向后兼容支持。用户负责 SQLAlchemy 可连接对象的引擎处置和连接关闭。请参见 这里

  • schema (str, 可选) – 指定模式(如果数据库类型支持)。如果为 None,请使用默认模式。

  • if_exists ({'fail', 'replace', 'append'}, default 'fail') –

    如果表已存在,如何处理。

    • fail: 引发 ValueError。

    • replace: 在插入新值之前删除表。

    • append: 将新值插入到现有表中。

  • index (bool, default True) – 将DataFrame索引作为一列写入。使用index_label作为表中的列名。

  • index_label (strsequence, 默认值 None) – 用于索引列的列标签。如果给定 None(默认值)并且index 为 True,则使用索引名称。如果 DataFrame 使用 MultiIndex,则应给出一个序列。

  • chunksize (int, 可选) – 指定每个批次一次写入的行数。默认情况下,所有行将一次性写入。

  • dtype (字典标量, 可选) – 指定列的数据类型。如果使用字典,键应为列名,值应为SQLAlchemy类型或sqlite3遗留模式的字符串。如果提供了标量,它将应用于所有列。

  • method ({None, 'multi', callable}, optional) –

    控制用于 SQL 插入子句:

    • None : 使用标准 SQL INSERT 子句(每行一个)。

    • ’multi’: 在单个 INSERT 子句中传递多个值。

    • 具有签名 (pd_table, conn, keys, data_iter) 的可调用对象。

    详细信息和示例可调用实现可以在

    insert method 中找到。

    在版本 0.24.0 中新增。

Raises

ValueError – 当表已存在且 if_exists 为‘fail’(默认值)。

另请参阅

read_sql

从表中读取数据框。

备注

时区感知的日期时间列将被写为 Timestamp with timezone 类型,如果数据库支持的话,使用 SQLAlchemy。如果不支持,则日期时间将作为不带时区的原始时区本地时间戳存储。

版本 0.24.0 新功能。

参考文献

1

http://docs.sqlalchemy.org

2

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

示例

创建一个内存中的SQLite数据库。

>>> import mars.dataframe as md
>>> from sqlalchemy import create_engine
>>> engine = create_engine('sqlite:////tmp/temp.db')

从头开始创建一个包含3行的表格。

>>> df = md.DataFrame({'name' : ['User 1', 'User 2', 'User 3']})
>>> df.execute()
     name
0  User 1
1  User 2
2  User 3
>>> df.to_sql('users', con=engine).execute()
>>> engine.execute("SELECT * FROM users").fetchall()
[(0, 'User 1'), (1, 'User 2'), (2, 'User 3')]
>>> df1 = md.DataFrame({'name' : ['User 4', 'User 5']})
>>> df1.to_sql('users', con=engine, if_exists='append').execute()
>>> engine.execute("SELECT * FROM users").fetchall()
[(0, 'User 1'), (1, 'User 2'), (2, 'User 3'),
 (0, 'User 4'), (1, 'User 5')]

df1 替换表格。

>>> df1.to_sql('users', con=engine, if_exists='replace',
...            index_label='id').execute()
>>> engine.execute("SELECT * FROM users").fetchall()
[(0, 'User 4'), (1, 'User 5')]

指定数据类型(对于缺失值的整数特别有用)。请注意,虽然pandas被迫将数据存储为浮点数,但数据库支持可空整数。当使用Python获取数据时,我们得到的是整数标量。

>>> df = md.DataFrame({"A": [1, None, 2]})
>>> df.execute()
     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()}).execute()
>>> engine.execute("SELECT * FROM integers").fetchall()
[(1,), (None,), (2,)]