Pandas教程:详解如何使用Pandas操作数据库

目录

1. 环境准备

2. 建立与数据库的连接

连接参数详解:

3. 从数据库读取数据

使用参数化查询

4. 将数据写入数据库

if_exists 参数详解:

5. 更新和删除数据

更新数据

删除数据

6. 实战案例

6.1 创建数据库和表

6.2 插入示例数据

6.3 更新学生信息

6.4 删除学生记录

6.5 从数据库读取数据并进行分析

7. 注意事项与常见问题

7.1 数据库连接失败

1. 检查数据库服务状态

2. 验证连接参数

3. 检查网络连接

4. 数据库权限问题

5. 查看错误信息

6. 连接参数调试

7.2 数据库表不存在

7.3 数据类型兼容性

7.4 大数据量写入

7.5 SQL 注入问题


在数据分析的工作流程中,数据的获取、处理和存储是至关重要的。Python 的 Pandas 库提供了强大的数据处理能力,而数据库(如 MySQL、PostgreSQL 等)则是高效存储和管理数据的工具。本文将详细介绍如何使用 Pandas 操作数据库,包括数据库读取数据、写入数据、更新和删除数据、实际案例和注意事项。

1. 环境准备


在开始之前,请确保安装了以下必要的 Python 库。可以使用以下命令进行安装:

pip install pandas sqlalchemy pymysql
  • Pandas:用于数据处理。
  • SQLAlchemy:提供数据库连接和操作的 ORM(对象关系映射)功能。
  • PyMySQL:用于 MySQL 数据库的连接(如果使用的是 MySQL)。

2. 建立与数据库的连接


使用 Pandas 操作数据库的第一步是建立连接。以下是连接数据库的基本步骤:

import pandas as pd
from sqlalchemy import create_engine# 数据库连接配置
username = 'your_username'  # 替换为你的数据库用户名
password = 'your_password'  # 替换为你的数据库密码
host = 'localhost'          # 数据库地址
database = 'your_database_name'  # 数据库名称# 创建数据库连接
engine = create_engine(f'mysql+pymysql://{username}:{password}@{host}/{database}')

连接参数详解:

  • username: 数据库的用户名。
  • password: 数据库的密码。
  • host: 数据库的主机地址(通常是 localhost 或者服务器的 IP 地址)。
  • database: 要连接的数据库名称。

3. 从数据库读取数据


通过 Pandas,您可以使用 pd.read_sql() 方法执行 SQL 查询并将结果读入 DataFrame。

# 从数据库读取数据
query = "SELECT * FROM your_table_name"  # 替换为你的查询
df = pd.read_sql(query, engine)# 显示前几行数据
print(df.head())

使用参数化查询

为了避免 SQL 注入攻击,可以使用参数化查询:

query = "SELECT * FROM your_table_name WHERE column_name = %s"
params = ('value',)
df = pd.read_sql(query, engine, params=params)

4. 将数据写入数据库


在数据处理完成后,您可以将 DataFrame 中的数据写入数据库的表中。

# 将 DataFrame 写入数据库
df.to_sql('your_table_name', engine, if_exists='replace', index=False)

if_exists 参数详解:

  • 'fail': 如果表存在,则不执行任何操作(默认值)。
  • 'replace': 如果表存在,则删除表并重新创建。
  • 'append': 如果表存在,则将数据附加到现有表中。

5. 更新和删除数据


在一些情况下,您可能需要更新或删除数据库中的数据。您可以使用 execute() 方法直接执行 SQL 语句。

更新数据

# 更新数据
with engine.connect() as connection:update_query = """UPDATE your_table_nameSET column_name = new_valueWHERE condition;"""connection.execute(update_query)

删除数据

# 删除数据
with engine.connect() as connection:delete_query = """DELETE FROM your_table_nameWHERE condition;"""connection.execute(delete_query)

6. 实战案例


假设我们要管理一个学生信息的数据库。我们将执行以下操作:

6.1 创建数据库和表

首先,确保你的 MySQL 数据库中有一个学生表。可以使用以下 SQL 语句创建表:

CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),age INT,score FLOAT
);

6.2 插入示例数据

# 插入示例数据
data = {'name': ['Alice', 'Bob', 'Charlie'],'age': [20, 22, 21],'score': [85.5, 90.0, 78.0]
}
df_students = pd.DataFrame(data)# 将数据写入数据库
df_students.to_sql('students', engine, if_exists='append', index=False)

6.3 更新学生信息

# 更新学生 Charlie 的分数
with engine.connect() as connection:update_query = """UPDATE studentsSET score = 80.0WHERE name = 'Charlie';"""connection.execute(update_query)

6.4 删除学生记录

# 删除年龄大于 21 的学生
with engine.connect() as connection:delete_query = """DELETE FROM studentsWHERE age > 21;"""connection.execute(delete_query)

6.5 从数据库读取数据并进行分析

# 从数据库读取数据
query = "SELECT * FROM students"
df_students = pd.read_sql(query, engine)# 数据分析:计算平均分
average_score = df_students['score'].mean()
print(f"平均分:{average_score}")

7. 注意事项与常见问题


7.1 数据库连接失败

1. 检查数据库服务状态

确保数据库服务正在运行。有时数据库可能未启动。您可以使用以下命令检查 MySQL 服务状态(以 MySQL 为例):

# 对于系统d
sudo systemctl status mysql# 对于旧版的系统
service mysql status

2. 验证连接参数

确保连接时使用的参数正确,包括:

  • 用户名: 确保提供的数据库用户名是有效的。
  • 密码: 确保密码正确,注意密码中的特殊符号可能需要转义。
  • 主机: 如果数据库在远程服务器上,请确保提供正确的 IP 地址或主机名。对于本地数据库,通常是 localhost 或 127.0.0.1
  • 数据库名称: 确保目标数据库已经存在,且名称拼写正确。

3. 检查网络连接

如果您连接的是远程数据库,确保网络连接正常。可以通过 ping 命令检查与数据库服务器的连接:

ping your_database_host

4. 数据库权限问题

确保您使用的数据库用户具有连接到数据库的权限。可以通过登录到数据库(使用其他工具,如 MySQL Workbench 或命令行工具)并执行以下 SQL 查询来检查权限:

SHOW GRANTS FOR 'your_username'@'localhost';

5. 查看错误信息

在连接失败时,Python 通常会返回一个错误信息。仔细查看错误信息,可能会提供有关问题的线索。可以使用 try-except 语句捕获错误并打印详细信息:

try:engine = create_engine('mysql+pymysql://username:password@host/database')connection = engine.connect()
except Exception as e:print(f"连接失败: {e}")

6. 连接参数调试

有时,添加一些连接参数可能会有所帮助。例如,charset=utf8 可以避免字符编码的问题:

engine = create_engine('mysql+pymysql://username:password@host/database?charset=utf8')

7.2 数据库表不存在

如果在尝试写入数据时遇到 Table doesn't exist 的错误,确保目标表已经存在。可以使用 if_exists='replace' 创建新表。

7.3 数据类型兼容性

在将 DataFrame 写入数据库时,确保数据类型与数据库表中的数据类型兼容。例如,如果数据库列期望整数类型,但 DataFrame 中的数据为浮点数类型,可能会导致错误。

7.4 大数据量写入

对于大量数据的写入,可以使用 chunksize 参数分批写入,以避免因内存不足而导致的错误:

df.to_sql('your_table_name', engine, if_exists='append', index=False, chunksize=1000)

7.5 SQL 注入问题

在构建 SQL 查询时,避免直接拼接字符串,使用参数化查询可以有效防止 SQL 注入攻击。

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

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

相关文章

OpenBayes 教程上新 | 文生图、图生图、图像修复三合一神器, HiDiffusion 一键启动教程现已上线!

扩散模型已成为高分辨率图像合成的主流方法,传统的扩散模型虽然在图像合成方面取得了显著进展,但在扩展到更高分辨率时往往面临对象重复和计算成本增加的问题。 旷世科技开源的高分辨率框架 HiDiffusion,由分辨率感知 U-Net (RAU-Net) 和改进…

Nacos 相关面试问题及答案

Nacos 是什么? Nacos (Naming and Configuration Service) 是一个开源项目,是由 Alibaba 开发的,它致力于提供动态服务发现、服务健康监测、动态配置服务以及服务管理的平台,它被设计用于帮助构建云原生应用,是微服务…

求最大公约数与最小公倍数(C语言 简洁快速版)

求最大公约数 辗转相除法(首选,因为简单快捷) 思路: 1.将两整数求余 a%b c 2.如果c 0;则b为最大公约数 3.如果c ! 0,则 a b;b c;继续从1开始执行 4.也就是说该循环的是否继续的判断条件就是c是否为0 …

3.4、图

图的介绍 图也是一种非线性结构,图中任意两个节点间都可能有直接关系。相关定义如下: 无向图:图的结点之间连接线是没有箭头的,不分方向。 有向图:图的结点之间连接线是箭头,区分A到B,和B到A是两条线。 …

Codeforces 962 div3 A-F

A 题目分析 签到 C代码 #include<iostream> using namespace std; int main(){int t;cin>>t;while(t--){int n;cin>>n;cout<<n/4n%4/2<<endl;} } B 题目分析 将n*n的方格分成若干个k*k的方格&#xff0c;每个k*k的方格中所有的数都相同 遍历…

开始写人工智能

文章目录 概述 概述 开始写人工智能模块。既然决定开始写这些&#xff0c;那就开始吧&#xff01;

linux命令常见功能性分类整理

linux怎么解决空间不足的情况 检查空间占用&#xff1a; df -h找出占用空间的文件或目录&#xff1a; du -sh /* du -sh /path/*清理缓存&#xff08;取决于你使用的Linux发行版&#xff09;&#xff1a; 对于Ubuntu/Debian&#xff1a; sudo apt-clean对于CentOS/Red Hat&…

【用户会话信息在异步事件/线程池的传递】

用户会话信息在异步事件/线程池的传递 author:shengfq date:2024-07-29 version:1.0 背景: 同事写的一个代码功能,是在一个主线程中通过如下代码进行异步任务的执行,结果遇到了问题. 1.ThreadPool.execute(Runnable)启动一个子线程执行异步任务 2.applicationContext.publis…

SwiftUI知识点(四)

NavigationStack import SwiftUIstruct NavigationStackBootcamp: View {let fruits ["Apple", "Orange", "Banana"]///路径数组State private var stackPath: [String] []var body: some View {NavigationStack(path: $stackPath) {VStack{B…

RocketMQ的Admin Tool工具

文档&#xff1a;https://github.com/apache/rocketmq/blob/develop/docs/cn/operation.md写的很全面&#xff0c;我写了一半就偷懒了&#xff0c;地址放这里。 命令大全&#xff1a;https://github.com/apache/rocketmq/blob/develop/docs/cn/operation.md 1. 删除讨厌的告警…

文献笔记|综述|A Survey of Large Language Models (前3章)

A Survey of Large Language Models 题目&#xff1a;大语言模型综述 作者&#xff1a;Wayne Xin Zhao, Kun Zhou, Junyi Li et al. 来源&#xff1a;arXiv 单位&#xff1a;中国人民大学高瓴人工智能学院、中国人民大学信息学院 关键词&#xff1a;Large Language Models; Eme…

AI之AI by Hand:AI by Hand(手动自定义AI算法的数学逻辑)的简介、使用方法、案例应用之详细攻略

AI之AI by Hand&#xff1a;AI by Hand(手动自定义AI算法的数学逻辑)的简介、使用方法、案例应用之详细攻略 目录 AI by Hand的简介 AI by Hand的使用方法 1、解读混合专家&#xff08;MoE&#xff09; 2、解读LSTM (Long Short-Term Memory) AI by Hand的案例应用 AI by …

质量小议41 -- 讲究 与 将就

你的质量是”讲究“ 还是 ”将就“ ”讲究“ 好还是 ”将就” 好 适用就好&#xff0c;是 “讲究” 还是 “将就” 质量在哪里&#xff1f; 价值在哪里&#xff1f; 讲究 注重&#xff0c;重视&#xff0c;力求完美&#xff1b;精美&#xff0c;完善&#xff1b;做…

学习大数据DAY25 Shell脚本的书写2与Shell工具的使用

目录 自定义函数 递归-自己调用自己 上机练习 12 Shell 工具 sort sed awk 上机练习 13 自定义函数 name(){ action; } function name { Action; } name 因为 shell 脚本是从上到下逐行运行&#xff0c;不会像其它语言一样先编译&#xff0c;所以函数必 须在调…

Ubuntu安装和简单操作MySQL工具

一、MySQL数据库的起源 MySQL 是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;其起源可以追溯到 1994 年。MySQL 最初是由瑞典公司 MySQL AB 开发的&#xff0c;该公司由 Michael “Monty” Widenius、Allan Larsson 和 David Axmark 于 1995 年成…

ruoyi框架的优缺点

若依框架的优缺点 ‌若依框架的优点包括&#xff1a; 优秀的性能表现&#xff1a;ruoyi框架以其优秀的性能表现&#xff0c;能够高效地处理各种开发任务。 多种组件支持&#xff1a;提供了多种组件的支持&#xff0c;使得开发者能够灵活地选择和使用各种工具和技术。 强大的…

MyBatis-Plus自动生成代码

目录 前言一. 什么是 MyBatis-Plus1. Mybatis-Plus 的特点2. Mybatis-Plus 结构二. MyBatis-Plus 自动生成步骤1. 数据库准备2. 环境准备(1) 创建一个空的 Spring Boot 工程(2) 导入pom依赖(3) 编辑application.yml文件(4) 在启动类加入 @MapperScan 注解3. 配置代码4. 运行三.…

江科大/江协科技 STM32学习笔记P15

文章目录 TIM输出比较1、输出比较简介2、PWM简介3、输出比较通道&#xff08;高级&#xff09;4、输出比较通道&#xff08;通用&#xff09;5、输出比较模式6、PWM基本结构参数计算 7、舵机简介8、直流电机及驱动简介驱动芯片 TIM输出比较 1、输出比较简介 CNT计数器&#x…

用户认证与授权:在 Symfony 中实现安全控制

用户认证与授权&#xff1a;在 Symfony 中实现安全控制 Symfony 是一个功能强大且高度可扩展的 PHP 框架&#xff0c;广泛用于开发复杂的 Web 应用程序。在现代 Web 应用程序中&#xff0c;用户认证和授权是不可或缺的功能&#xff0c;用于确保应用程序的安全性和数据的隐私性…