【Pandas】pandas DataFrame to_sql

Pandas2.2 DataFrame

Serialization IO conversion

方法描述
DataFrame.from_dict(data[, orient, dtype, …])用于从 字典(dict) 构建 DataFrame 的类方法
DataFrame.from_records(data[, index, …])用于将 结构化数据(如列表的元组、NumPy 结构化数组)转换为 DataFrame
DataFrame.to_orc([path, engine, index, …])用于将 DataFrame 保存为 ORC(Optimized Row Columnar)格式的文件
DataFrame.to_parquet([path, engine, …])用于将 DataFrame 写入 Parquet 文件格式的方法
DataFrame.to_pickle(path, *[, compression, …])用于将 DataFrame 对象序列化并保存为 pickle 文件的方法
DataFrame.to_csv([path_or_buf, sep, na_rep, …])用于将 DataFrame 写入 CSV(逗号分隔值)文件的方法
DataFrame.to_hdf(path_or_buf, *, key[, …])用于将 DataFrame 写入 HDF5 文件的方法
DataFrame.to_sql(name, con, *[, schema, …])用于将 DataFrame 写入 SQL 数据库的方法

pandas DataFrame to_sql()

pandas.DataFrame.to_sql() 是 Pandas 提供的用于将 DataFrame 写入 SQL 数据库的方法。它支持多种数据库后端(如 SQLite、PostgreSQL、MySQL 等),通过 SQLAlchemy 引擎实现跨数据库兼容性。


方法签名
DataFrame.to_sql(
    name,
    con,
    *,
    schema=None,
    if_exists='fail',
    index=True,
    index_label=None,
    chunksize=None,
    dtype=None,
    method=None
)

参数说明
参数名类型说明
namestr目标数据库表名
conSQLAlchemy 可连接对象 或 DBAPI2 连接字符串数据库连接,例如 'sqlite:///example.db'
schemastr, 可选指定数据库模式(schema)名称
if_exists{‘fail’, ‘replace’, ‘append’}, 默认 ‘fail’表已存在时的行为:
- 'fail': 不操作,抛出异常
- 'replace': 删除原表再创建新表
- 'append': 将数据追加到现有表
indexbool,默认 True是否将 DataFrame 的索引写入数据库
index_labelstr 或 list,可选自定义索引列名,若未指定且 index=True,使用 df.index.name
chunksizeint,可选分批写入数据库的行数,避免一次性加载大数据量
dtypedict,可选指定每列在数据库中的 SQL 类型,例如:{'col_name': VARCHAR(255)}
method{‘multi’, callable}, 可选控制插入方式:
- 'multi': 批量插入,提高效率
- 自定义函数:自定义插入逻辑

返回值
  • 返回写入数据库的行数(int)

示例代码
示例 1:基础用法(写入 SQLite 数据库)
import pandas as pd
from sqlalchemy import create_engine

# 创建示例 DataFrame
df = pd.DataFrame({
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35]
})

# 创建 SQLite 数据库连接
engine = create_engine('sqlite:///example.db')

# 写入数据库
df.to_sql('people', con=engine, if_exists='replace', index=False)

结果:

  • 在当前目录下生成一个名为 example.db 的 SQLite 数据库文件。
  • 其中包含一张名为 people 的表,内容为上述 DataFrame 的数据。

示例 2:写入 PostgreSQL 数据库
# PostgreSQL 连接字符串格式
conn_str = "postgresql://username:password@localhost:5432/mydatabase"

# 创建连接引擎
engine = create_engine(conn_str)

# 写入 PostgreSQL 表(替换已有表)
df.to_sql('people', con=engine, if_exists='replace', index=False, schema='public')

说明:

  • 需要先安装 PostgreSQL 支持:
pip install psycopg2-binary

示例 3:自定义列类型(dtype
from sqlalchemy import VARCHAR, Integer

# 自定义列类型
dtype_mapping = {
    'id': Integer,
    'name': VARCHAR(255),
    'age': Integer
}

# 写入 SQLite 并指定列类型
df.to_sql('people', con=engine, if_exists='replace', dtype=dtype_mapping)

用途:

  • 控制数据库字段长度、精度等细节。

示例 4:分块写入(chunksize
# 分块写入,每批 1000 行
df_large = pd.concat([df] * 10000)  # 模拟大数据集
df_large.to_sql('people', con=engine, if_exists='replace', chunksize=1000)

优点:

  • 减少内存占用,适用于百万级以上数据导入。

示例 5:追加写入已有表(if_exists='append'
# 新增一行数据并追加写入
new_row = pd.DataFrame({'id': [4], 'name': ['David'], 'age': [28]})
new_row.to_sql('people', con=engine, if_exists='append', index=False)

注意:

  • 表结构必须一致,否则会报错。

注意事项
  • 使用前需安装对应数据库驱动(如 psycopg2 for PostgreSQL, mysqlclient for MySQL)。
  • 若目标表不存在,to_sql() 会自动创建;若存在则根据 if_exists 处理。
  • 建议使用 chunksize 处理大规模数据,防止内存溢出。
  • dtype 参数可用于优化数据库字段类型,提升性能和存储效率。
  • 使用 method='multi' 可以显著加快插入速度(尤其在 SQLite 上)。

总结
特性说明
方法名DataFrame.to_sql()
输入DataFrame
输出SQL 数据库表
主要用途将 DataFrame 数据持久化到关系型数据库
支持数据库SQLite、PostgreSQL、MySQL 等(依赖 SQLAlchemy)
支持功能替换/追加写入、自定义字段类型、分块写入
推荐场景数据入库、ETL 流程、数据分析结果导出

安装依赖
pip install pandas sqlalchemy

对于不同数据库还需安装额外驱动:

  • SQLite(默认支持)
  • PostgreSQL:
pip install psycopg2-binary
  • MySQL:
pip install mysqlclient
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuweidong0802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值