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