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.Engine 或 sqlite3.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 (str 或 sequence, 默认值 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 新功能。
参考文献
示例
创建一个内存中的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,)]