看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas.DataFrame.to_sql() 是 Pandas 库中用于将 DataFrame 对象中的数据写入到关系型数据库中的方法。通过此方法,可以轻松地将数据存储到各种数据库系统中,如 SQLite、MySQL、PostgreSQL 等,便于后续的数据查询、分析和管理。
DataFrame.to_sql(
    name, 
    con, 
    *, 
    schema=None, 
    if_exists='fail', 
    index=True, 
    index_label=None, 
    chunksize=None, 
    dtype=None, 
    method=None
)
name
strif_exists 参数的设置决定是否创建新表。con
SQLAlchemy engine 或 sqlite3.Connectionschema
str,可选Noneif_exists
{'fail', 'replace', 'append'},可选'fail''fail': 抛出 ValueError,不进行任何操作。'replace': 删除已存在的表,并创建一个新表,然后写入数据。'append': 在已存在的表中追加数据。index
boolTrueDataFrame 的索引写入数据库表中。如果设置为 True,索引将作为一列写入;如果为 False,索引将被忽略。index_label
str 或 sequence of str,可选NoneDataFrame 索引的名称;如果索引没有名称,将使用默认的列名。chunksize
int,可选NoneDataFrame 非常有用,可以分块写入以节省内存并提高性能。dtype
dict,可选Nonemethod
str、callable 或 None,可选NoneNone: 使用默认的 INSERT 语句。'multi': 使用多行插入语句,提高写入速度。callable: 提供一个自定义的插入方法函数。Nonebuf 参数为 None,则返回生成的 SQL 语句字符串;否则,数据将被写入到指定的数据库表中。DataFrame.to_sql() 主要用于以下场景:
import pandas as pd
import sqlite3
# 构造示例数据
data = {
    '姓名': ['艾丽丝', '鲍勃', '查理'],
    '年龄': [30, 25, 35],
    '城市': ['纽约', '洛杉矶', '芝加哥']
}
df = pd.DataFrame(data)
# 创建 SQLite 数据库连接
conn = sqlite3.connect('example.db')
# 将 DataFrame 写入数据库表 'persons'
df.to_sql('persons', con=conn, if_exists='replace', index=False)
# 读取并打印数据库中的数据
df_from_db = pd.read_sql('SELECT * FROM persons', conn)
print(df_from_db)
# 关闭数据库连接
conn.close()
输出
姓名  年龄     城市
0  艾丽丝   30     纽约
1    鲍勃   25  洛杉矶
2  查理   35  芝加哥
import pandas as pd
import sqlite3
# 构造新的示例数据
new_data = {
    '姓名': ['大卫', '伊丽莎'],
    '年龄': [28, 32],
    '城市': ['波士顿', '旧金山']
}
new_df = pd.DataFrame(new_data)
# 创建 SQLite 数据库连接
conn = sqlite3.connect('example.db')
# 将新数据追加到数据库表 'persons'
new_df.to_sql('persons', con=conn, if_exists='append', index=False)
# 读取并打印数据库中的所有数据
df_from_db = pd.read_sql('SELECT * FROM persons', conn)
print(df_from_db)
# 关闭数据库连接
conn.close()
输出
姓名  年龄     城市
0  艾丽丝   30     纽约
1    鲍勃   25  洛杉矶
2  查理   35  芝加哥
3    大卫   28   波士顿
4  伊丽莎   32  旧金山
import pandas as pd
from sqlalchemy import create_engine, Integer, String
# 构造示例数据
data = {
    '姓名': ['艾丽丝', '鲍勃', '查理'],
    '年龄': [30, 25, 35],
    '城市': ['纽约', '洛杉矶', '芝加哥']
}
df = pd.DataFrame(data)
# 创建 SQLAlchemy 引擎
engine = create_engine('sqlite:///example.db')
# 指定列的数据类型
dtype_mapping = {
    '姓名': String(50),
    '年龄': Integer(),
    '城市': String(100)
}
# 将 DataFrame 写入数据库表 'persons_dtype',指定数据类型
df.to_sql('persons_dtype', con=engine, if_exists='replace', index=False, dtype=dtype_mapping)
# 读取并打印数据库中的数据
df_from_db = pd.read_sql('SELECT * FROM persons_dtype', engine)
print(df_from_db)
输出
姓名  年龄     城市
0  艾丽丝   30     纽约
1    鲍勃   25  洛杉矶
2  查理   35  芝加哥
import pandas as pd
from sqlalchemy import create_engine
# 构造示例数据
data = {
    '姓名': ['艾丽丝'] * 1000,
    '年龄': [30] * 1000,
    '城市': ['纽约'] * 1000
}
df = pd.DataFrame(data)
# 创建 SQLAlchemy 引擎
engine = create_engine('sqlite:///example.db')
# 使用 'multi' 方法一次插入多行,提高写入速度
df.to_sql('persons_multi', con=engine, if_exists='replace', index=False, method='multi')
# 读取并打印部分数据库中的数据
df_from_db = pd.read_sql('SELECT * FROM persons_multi LIMIT 5', engine)
print(df_from_db)
输出
姓名  年龄   城市
0  艾丽丝   30  纽约
1  艾丽丝   30  纽约
2  艾丽丝   30  纽约
3  艾丽丝   30  纽约
4  艾丽丝   30  纽约
import pandas as pd
import sqlite3
# 构造示例数据
data = {
    '姓名': ['艾丽丝', '鲍勃', '查理'],
    '年龄': [30, 25, 35],
    '城市': ['纽约', '洛杉矶', '芝加哥']
}
df = pd.DataFrame(data)
# 创建 SQLite 数据库连接
conn = sqlite3.connect('example.db')
# 将 DataFrame 写入数据库表 'persons_no_index',不包含索引
df.to_sql('persons_no_index', con=conn, if_exists='replace', index=False)
# 读取并打印数据库中的数据
df_from_db = pd.read_sql('SELECT * FROM persons_no_index', conn)
print(df_from_db)
# 关闭数据库连接
conn.close()
输出
姓名  年龄     城市
0  艾丽丝   30     纽约
1    鲍勃   25  洛杉矶
2  查理   35  芝加哥
pandas.DataFrame.to_sql() 是一个强大的方法,能够将 Pandas 的 DataFrame 数据高效地写入到各种关系型数据库中。通过灵活配置参数,如指定表名、处理已存在表的方式、控制索引的写入、分块写入大数据集以及自定义数据类型等,可以满足不同的数据存储需求。在数据分析、数据集成和数据持久化等多个领域,掌握 to_sql() 的使用方法能够显著提升数据管理和处理的效率。
更新时间:2024-10-10 09:21:45 标签:pandas python 数据库