用法:
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] 支持的数据库。可以新创建、附加或覆盖表。
- name:str
SQL 表的名称。
- con:sqlalchemy.engine(引擎或连接)或 sqlite3.Connection
使用 SQLAlchemy 可以使用该库支持的任何数据库。为 sqlite3.Connection 对象提供了旧版支持。用户负责 SQLAlchemy 可连接的引擎处理和连接关闭,请参阅这里。
- schema:str,可选
指定架构(如果数据库风格支持此)。如果没有,使用默认模式。
- if_exists:{‘fail’, ‘replace’, ‘append’},默认 ‘fail’
如果表已经存在,如何表现。
失败:引发ValueError
替换:在插入新值之前删除表。
append:向现有表中插入新值。
- index:布尔值,默认为真
将DataFrame 索引写为一列。使用
index_label
作为表中的列名。- index_label:str 或序列,默认无
索引列的列标签。如果给出 None(默认)并且
index
为 True,则使用索引名称。如果DataFrame 使用MultiIndex,则应给出一个序列- chunksize:int 可选
指定每次要写入的每批中的行数。默认情况下,将一次写入所有行。
- dtype:dict或标量,可选
指定列的数据类型。如果使用字典,键应该是列名,值应该是 SQLAlchemy 类型或 sqlite3 旧模式的字符串。如果提供了标量,它将应用于所有列。
- method:{无,‘multi’,可调用},可选
控制使用的 SQL 插入子句:
无:使用标准 SQL
INSERT
子句(每行一个)。‘multi’:在单个
INSERT
子句中传递多个值。可使用签名
(pd_table, conn, keys, data_iter)
调用。
详细信息和示例可调用实现可以在部分插入方法中找到。
- 无或int
受to_sql 影响的行数。如果传递给
method
的可调用对象不返回行数,则返回无。受影响的返回行数是
sqlite3.Cursor
或 SQLAlchemy 可连接的rowcount
属性的总和,这可能无法反映 sqlite3 或 SQLAlchemy 中规定的写入行的确切数量。
- ValueError
当表已存在且
if_exists
为‘fail’(默认值)时。
参数:
返回:
抛出:
注意:
如果数据库支持,时区感知日期时间列将使用 SQLAlchemy 编写为
Timestamp with timezone
类型。否则,日期时间将存储为原始时区本地的时区未知时间戳。参考:
例子:
创建一个内存 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,)]
相关用法
- Python pandas.DataFrame.to_string用法及代码示例
- Python pandas.DataFrame.to_stata用法及代码示例
- Python pandas.DataFrame.to_numpy用法及代码示例
- Python pandas.DataFrame.to_json用法及代码示例
- Python pandas.DataFrame.to_xml用法及代码示例
- Python pandas.DataFrame.to_latex用法及代码示例
- Python pandas.DataFrame.to_pickle用法及代码示例
- Python pandas.DataFrame.to_csv用法及代码示例
- Python pandas.DataFrame.to_dict用法及代码示例
- Python pandas.DataFrame.to_clipboard用法及代码示例
- Python pandas.DataFrame.to_hdf用法及代码示例
- Python pandas.DataFrame.to_markdown用法及代码示例
- Python pandas.DataFrame.to_excel用法及代码示例
- Python pandas.DataFrame.to_records用法及代码示例
- Python pandas.DataFrame.to_parquet用法及代码示例
- Python pandas.DataFrame.to_xarray用法及代码示例
- Python pandas.DataFrame.to_period用法及代码示例
- Python pandas.DataFrame.truncate用法及代码示例
- Python pandas.DataFrame.transpose用法及代码示例
- Python pandas.DataFrame.transform用法及代码示例
注:本文由纯净天空筛选整理自pandas.pydata.org大神的英文原创作品 pandas.DataFrame.to_sql。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。