用Python Pandas高效操作数据库:从查询到写入的完整指南

一、环境准备与数据库连接

1.1 安装依赖库

pip install pandas sqlalchemy psycopg2  # PostgreSQL
# 或
pip install pandas sqlalchemy pymysql  # MySQL
# 或
pip install pandas sqlalchemy          # SQLite

1.2 创建数据库引擎

通过SQLAlchemy创建统一接口:

from sqlalchemy import create_engine# PostgreSQL示例
engine = create_engine('postgresql+psycopg2://user:password@host:port/dbname')# MySQL示例 
engine = create_engine('mysql+pymysql://user:password@host:port/dbname')# SQLite示例
engine = create_engine('sqlite:///mydatabase.db')

二、数据库读取操作

2.1 读取整张表

import pandas as pd# 读取users表全部数据
df = pd.read_sql('users', con=engine)
print(df.head())

2.2 执行复杂查询

query = """
SELECT user_id, COUNT(order_id) AS order_count,SUM(amount) AS total_spent
FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY user_id
HAVING total_spent > 1000
"""result_df = pd.read_sql(query, con=engine)

2.3 分块读取大数据集

chunk_size = 10000
chunks = pd.read_sql('large_table', con=engine, chunksize=chunk_size)for chunk in chunks:process_chunk(chunk)  # 自定义处理函数

三、数据写入数据库

3.1 整表写入

# 将DataFrame写入新表
df.to_sql('new_table', con=engine, if_exists='replace',  # 存在则替换index=False
)

3.2 追加写入模式

# 追加数据到现有表
df.to_sql('existing_table',con=engine,if_exists='append',index=False
)

3.3 批量写入优化

# 使用method='multi'加速写入
df.to_sql('high_perf_table',con=engine,if_exists='append',index=False,method='multi', chunksize=1000
)

四、高级技巧与性能优化

4.1 数据类型映射

自定义类型转换保证数据一致性:

Pandas类型SQL类型(PostgreSQL)处理方案
objectVARCHAR自动转换
int64BIGINT检查数值范围
datetime64TIMESTAMP指定dtype参数
categoryENUM手动创建ENUM类型
from sqlalchemy.dialects.postgresql import VARCHAR, INTEGERdtype = {'user_name': VARCHAR(50),'age': INTEGER
}df.to_sql('users', engine, dtype=dtype, index=False)

4.2 事务管理

from sqlalchemy import textwith engine.begin() as conn:# 删除旧数据conn.execute(text("DELETE FROM temp_table WHERE create_date < '2023-01-01'"))# 写入新数据df.to_sql('temp_table', con=conn, if_exists='append', index=False)

4.3 并行处理加速

from concurrent.futures import ThreadPoolExecutordef write_chunk(chunk):chunk.to_sql('parallel_table', engine, if_exists='append', index=False)with ThreadPoolExecutor(max_workers=4) as executor:chunks = np.array_split(df, 8)executor.map(write_chunk, chunks)

五、常见问题解决方案

5.1 编码问题处理

# 指定连接编码
engine = create_engine('mysql+pymysql://user:pass@host/db',connect_args={'charset': 'utf8mb4'}
)

5.2 日期时间处理

# 读取时转换时区
df = pd.read_sql('SELECT * FROM events',con=engine,parse_dates={'event_time': {'utc': True}}
)# 写入时指定时区
from sqlalchemy import DateTime
dtype = {'event_time': DateTime(timezone=True)}

5.3 内存优化

# 指定低精度类型
dtype = {'price': sqlalchemy.Numeric(10,2),'quantity': sqlalchemy.SmallInteger
}df.to_sql('products', engine, dtype=dtype)

六、完整工作流示例

mermaid:

graph LR
A[数据库连接] --> B[执行SQL查询]
B --> C[获取DataFrame]
C --> D[数据清洗转换]
D --> E[分析处理]
E --> F[结果写入数据库]

七、性能对比测试

数据规模直接写入(秒)批量写入(秒)提升比例
10万条45.212.372.8%
100万条432.189.779.2%
1000万条内存溢出256.4-

八、最佳实践总结

  1. 连接管理:始终使用上下文管理器确保连接关闭

  2. 类型声明:显式定义字段类型避免隐式转换

  3. 批量操作:合理设置chunksize提升吞吐量

  4. 索引优化:为查询字段添加数据库索引

  5. 错误处理:添加重试机制应对网络波动

完整示例代码仓库:GitHub链接
扩展阅读:《Pandas高效数据处理技巧》


通过掌握这些核心技巧,您可以将Pandas的灵活数据处理能力与数据库的强大存储管理完美结合,构建高效可靠的数据流水线。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/77185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题(小白)暴力娱乐篇31

首先分析一下题意&#xff0c;需要求出2024的因子&#xff0c;因为我们要求与2024互质的数字&#xff0c;为什么呢&#xff1f;因为我们要求互质说直白点就是我和你两个人没有中间人&#xff0c;我们是自然而然认识的&#xff0c;那我们怎么认识呢&#xff0c;就是直接见面对吧…

电控---printf重定向输出

在嵌入式系统开发中&#xff0c;printf 重定向输出是将标准输出&#xff08;stdout&#xff09;从默认设备&#xff08;如主机终端&#xff09;重新映射到嵌入式设备的特定硬件接口&#xff08;如串口、LCD、USB等&#xff09;的过程。 一、核心原理&#xff1a;标准IO库的底层…

快速认识:数据库、数仓(数据仓库)、数据湖与数据运河

数据技术核心概念对比表 概念核心定义核心功能数据特征典型技术/工具核心应用场景数据库结构化数据的「电子档案柜」&#xff0c;按固定 schema 存储和管理数据&#xff0c;支持高效读写和事务处理。实时事务处理&#xff08;增删改查&#xff09;&#xff0c;确保数据一致性&…

【17】数据结构之图的遍历篇章

目录标题 图的遍历深度优先遍历 Depth First Search广度优先遍历 Breadth First Search 图的遍历 从图中某一个顶点出发&#xff0c;沿着一些边访遍图中所有的顶点&#xff0c;且使用每个顶点仅被访问一次&#xff0c;这个过程称为图的遍历.Graph Traversal. 其中&#xff0c…

简单接口工具(ApiCraft-Web)

ApiCraft-Web 项目介绍 ApiCraft-Web 是一个轻量级的 API 测试工具&#xff0c;提供了简洁直观的界面&#xff0c;帮助开发者快速测试和调试 HTTP 接口。 功能特点 支持多种 HTTP 请求方法&#xff08;GET、POST、PUT、DELETE&#xff09;可配置请求参数&#xff08;Query …

Git进阶操作

Git高阶操作完全指南&#xff1a;解锁专业开发工作流 前言 在当今的软件开发领域&#xff0c;掌握高级Git技能已成为区分普通开发者与专业开发者的关键因素。根据最新的GitHub数据&#xff0c;熟练应用交互式暂存和Rebase等高级功能的开发者&#xff0c;其代码审查通过率平均提…

Python结合AI生成图像艺术作品代码及介绍

为实现生成图像艺术作品&#xff0c;我选用 Stable Diffusion 库结合 Python 编写代码。下面先展示代码&#xff0c;再详细介绍其原理、模块及使用方法等内容。 生成图片代码 import torch from diffusers import StableDiffusionPipeline# 加载预训练模型 pipe StableDiffu…

Linux操作系统--静态库和动态库的生成and四种解决加载找不到动态库的四种方法

目录 必要的知识储备&#xff1a; 生成静态库&#xff1a; 生成动态库&#xff1a; 解决加载找不到动态库的四种方法&#xff1a; 第一种&#xff1a;拷贝到系统默认的库路径 /usr/lib64/ 第二种&#xff1a;在系统默认的库路径/usr/lib64/下建立软链接 第三种&#xff1…

LLM中的N-Gram、TF-IDF和Word embedding

文章目录 1. N-Gram和TF-IDF&#xff1a;通俗易懂的解析1.1 N-Gram&#xff1a;让AI学会"猜词"的技术1.1.1 基本概念1.1.2 工作原理1.1.3 常见类型1.1.4 应用场景1.1.5 优缺点 1.2 TF-IDF&#xff1a;衡量词语重要性的尺子1.2.1 基本概念1.2.2 计算公式1.2.3 为什么需…

Leetcode 3359. 查找最大元素不超过 K 的有序子矩阵【Plus题】

1.题目基本信息 1.1.题目描述 给定一个大小为 m x n 的二维矩阵 grid。同时给定一个 非负整数 k。 返回满足下列条件的 grid 的子矩阵数量&#xff1a; 子矩阵中最大的元素 小于等于 k。 子矩阵的每一行都以 非递增 顺序排序。 矩阵的子矩阵 (x1, y1, x2, y2) 是通过选择…

如何在 Ubuntu 22.04 上安装、配置、使用 Nginx

如何在 Ubuntu 22.04 上安装、配置、使用 Nginx&#xff1f;-阿里云开发者社区 更新应用 sudo apt updatesudo apt upgrade检查必要依赖并安装 sudo apt install -y curl gnupg2 ca-certificates lsb-release安装nginx sudo apt install -y nginx# 启动nginx sudo systemct…

Linux:显示 -bash-4.2$ 问题(CentOS 7)

文章目录 一、原因二、错误示例三、解决办法 一、原因 在 CentOS 7 系统中&#xff0c;如果你看到命令行提示符显示为 -bash-4.2$&#xff0c;一般是 Bash shell 正在运行&#xff0c;并且它没有找到用户的个人配置文件&#xff0c;或者这些文件有问题而未能成功加载。这个提示…

QT6 源(34):随机数生成器类 QRandomGenerator 的源码阅读

&#xff08;1&#xff09;代码来自 qrandom.h &#xff0c;结合官方的注释&#xff1a; #ifndef QRANDOM_H #define QRANDOM_H#include <QtCore/qalgorithms.h> #include <algorithm> // for std::generate #include <random> // for std::mt1993…

第二篇:linux之Xshell使用及相关linux操作

第二篇&#xff1a;linux之Xshell使用及相关linux操作 文章目录 第二篇&#xff1a;linux之Xshell使用及相关linux操作一、Xshell使用1、Xshell安装2、Xshell使用 二、Bash Shell介绍与使用1、什么是Bash Shell(壳)&#xff1f;2、Bash Shell能干什么&#xff1f;3、平时如何使…

MCP(模型上下文协议)学习笔记

学习MCP&#xff08;模型上下文协议&#xff09;的系统化路径&#xff0c;结合技术原理、工具实践和社区资源&#xff0c;帮助你高效掌握这一AI交互标准&#xff1a; 在当今人工智能飞速发展的时代&#xff0c;AI技术正以前所未有的速度改变着我们的生活和工作方式。然而&#…

MIR-2025 | 多模态知识助力机器人导航:从复杂环境到高效路径规划

作者&#xff1a;Hui Yuan, Yan Huang, Zetao Du, Naigong Yu, Ziqi Liu, Dongbo Zhang, Kun Zhang 单位&#xff1a;北京工业大学信息科学与技术学院&#xff0c;北京工业大学计算智能与智能系统北京市重点实验室&#xff0c;中科院自动化研究所模式识别国家重点实验室与多智…

javaSE.泛型界限

现在有一个新的需求&#xff0c;没有String类型成绩了&#xff0c;但是成绩依然可能是整数&#xff0c;也可能是小数&#xff0c;这是我们不希望用户将泛型指定为除数字类型外的其他类型&#xff0c;我们就需要使用到泛型的上界定义&#xff1a; 上界&#x1f447;只能使用其本…

压缩包网页预览(zip-html-preview)

zip-html-preview 项目介绍 这是一个基于 Spring Boot 开发的在线 ZIP 文件预览工具,主要用于预览 ZIP 压缩包中的 HTML 文件及其相关资源。 主要功能 支持拖拽上传或点击选择多个 ZIP 文件自动解压并提取 ZIP 文件中的 HTML 文件在线预览 HTML 文件及其相关的 CSS、JavaSc…

QML之Overlay

Overlay&#xff08;覆盖层&#xff09;是QML中用于在当前界面之上显示临时内容的重要组件。 一、Overlay基础概念 1.1 什么是Overlay&#xff1f; Overlay是一种浮动在现有界面之上的视觉元素&#xff0c;具有以下特点&#xff1a; 临时显示&#xff0c;不影响底层布局 通…

iso17025证书申请方法?iso17025认证意义

ISO/IEC 17025证书申请方法 ISO/IEC 17025是检测和校准实验室能力的国际标准&#xff0c;申请CNAS认可的流程如下&#xff1a; 1. 前期准备 标准学习&#xff1a;深入理解ISO/IEC 17025:2017标准要求。 差距分析&#xff1a;评估现有实验室管理与技术能力与标准的差距。 制…