pandas读取数据库mysql及处理where in 【List,Array】问题

本文介绍了如何使用pandas和SQLAlchemy从MySQL数据库中读取数据,以及如何将DataFrame存储回数据库。还展示了如何处理`WHERE IN`子句来处理包含多个值的查询。此外,提到了使用pymysql执行SQL语句的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.pandas读取数据库mysql
#jupyter notebook安装pymysql 
!pip install pymysql
#用到的模块create_engine
 import pandas as pd
 from sqlalchemy import create_engine
 
 # MySQL的用户:root, 密码:123456, 端口:3306,数据库:test
engine =create_engine('mysql+pymysql://root:123456@localhost:3306/test')
# 查询语句
sql = ''' select * from table ;'''
 # read_sql_query的两个参数: sql语句, 数据库连接
df = pd.read_sql_query(sql, engine)

 # 新建pandas中的DataFrame, 只有id,num两列
df = pd.DataFrame({'id': [1, 2, 3, 4], 'name': ['zhangsan', 'lisi', 'wangwu', 'zhuliu']})
# 将新建的DataFrame储存为MySQL中的数据表,储存index列
df.to_sql('mydf', engine, index=True)

读取数据的几种方式
==============================================================================
#第一种读取数据方式  ----pandas 如上
#第二种读取数据方式  ----engine.execute(sql)
from sqlalchemy import create_engine

engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
sql = "DROP TABLE IF EXISTS example"
engine.execute(sql)

#第三种读取数据方式  ----pymysql
import pymysql
from sqlalchemy import create_engine

conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='test')
sql = "DROP TABLE IF EXISTS test_input"# sql语句
cursor = conn.cursor()
cursor.execute(sql)
2.将DataFrame存入mysql
# 读取本地CSV文件
df = pd.read_csv("example.csv", sep=',')
df
# 将新建的DataFrame储存为MySQL中的数据表,不储存index列(index=False)
# if_exists:
# 1.fail:如果表存在,啥也不做
# 2.replace:如果表存在,删了表,再建立一个新表,把数据插入
# 3.append:如果表存在,把数据插入,如果表不存在创建一个表!!
pd.io.sql.to_sql(df, 'example', con=engine, index=False, if_exists='replace')
# df.to_sql('example', con=engine,  if_exists='replace')这种形式也可以
3.where in 对列表(list,array)问题
#假如 你要执行这个语句
select * from server where ip in (....)
ip_list=['0.0.0.0','1.1.1.1','2.2.2.2',.......]#老多了
new_list=','.join(["'%s'" % item for item in ip_list])
# "'0.0.0.0','1.1.1.1','2.2.2.2'........"

import pandas as pd
from sqlalchemy import create_engine
#建立连接
engine =create_engine('mysql+pymysql://root:123456@localhost:3306/test')
sql_2='''select * from server where ip in ({});'''.format(new_list)# 查询语句
df=pd.read_sql_query(sql_2, engine)#读取数据

<think>好的,用户想了解如何使用pandas读取MySQL数据库。首先,我需要回忆一下pandas的相关方法。记得pandas有一个read_sql的函数,可以用来从数据库读取数据,但需要配合数据库连接库使用。 接下来,用户可能需要具体的步骤,所以应该分步骤说明。首先,需要安装必要的库,比如pandasmysql-connector-python。然后,建立数据库连接,这里可能会提到不同的驱动,比如PyMySQL或者mysql-connector,用户可能需要示例代码。 然后,可能需要演示如何编写连接字符串,使用create_engine从SQLAlchemy。这里要注意格式,比如mysql+mysqlconnector://用户名:密码@主机/数据库名。用户可能会遇到驱动问题,需要提醒他们根据实际情况选择驱动。 接下来,使用pd.read_sql_query或read_sql来执行SQL查询,或者直接读取整个表。这里需要区分两者的使用场景,比如查询特定数据还是整个表。 还要提到关闭连接的重要性,虽然使用with语句可能自动处理,但最好还是提醒用户手动关闭,避免资源泄露。 另外,考虑用户可能遇到的常见问题,比如字符集设置,端口指定,或者SSL连接。这些可以在注意事项里提到,帮助用户避免踩坑。 最后,给出完整的示例代码,从导入库到读取数据,再到关闭连接,确保用户能一步步跟着操作。同时,提醒他们替换实际的数据库信息,保证安全。 需要检查是否有遗漏的步骤,比如安装库的部分是否全面,连接字符串是否正确,以及异常处理是否需要提及。不过根据用户的问题,可能不需要太深入的错误处理,但至少提到常见问题。 总结下来,回答的结构应该是先安装依赖,然后建立连接,执行查询,处理结果,关闭连接,最后注意事项和示例代码。确保步骤清晰,代码正确,用户能顺利操作。</think>以下是使用pandas读取MySQL数据库的详细步骤: --- ### **1. 安装依赖库** ```bash # 安装pandasMySQL驱动(任选其一) pip install pandas sqlalchemy mysql-connector-python # 官方驱动 # 或 pip install pandas sqlalchemy pymysql # 第三方PyMySQL驱动 ``` --- ### **2. 建立数据库连接** 使用`create_engine`创建连接对象(需替换实际参数): ```python from sqlalchemy import create_engine # 格式:mysql+驱动://用户名:密码@主机地址:端口/数据库名 engine = create_engine('mysql+mysqlconnector://root:password@localhost:3306/mydatabase') ``` --- ### **3. 执行SQL查询** #### 方式一:读取整个表 ```python import pandas as pd # 读取整张表 df = pd.read_sql_table('table_name', con=engine) ``` #### 方式二:自定义SQL查询 ```python # 执行任意SQL语句 query = "SELECT * FROM table_name WHERE column > 100" df = pd.read_sql_query(query, con=engine) ``` --- ### **4. 处理查询结果** ```python # 查看前5行数据 print(df.head()) # 保存为CSV文件 df.to_csv('output.csv', index=False) ``` --- ### **5. 关闭连接** ```python engine.dispose() # 释放数据库连接 ``` --- ### **注意事项** 1. 字符集问题:若含中文,连接字符串添加`?charset=utf8mb4` ```python engine = create_engine('mysql+pymysql://user:pass@host/db?charset=utf8mb4') ``` 2. 指定端口:非默认端口需在连接字符串中标注 `@host:port` 3. SSL连接:需添加SSL证书参数(生产环境常用) --- ### **完整示例代码** ```python import pandas as pd from sqlalchemy import create_engine # 创建连接 engine = create_engine('mysql+pymysql://user:password@localhost/mydb') # 执行SQL查询 query = ''' SELECT date, sales, product FROM sales_records WHERE date >= '2023-01-01' ''' df = pd.read_sql_query(query, engine) # 处理数据 print(f"共读取{len(df)}条记录") print(df.describe()) # 关闭连接 engine.dispose() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Elvis_hui

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

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

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

打赏作者

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

抵扣说明:

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

余额充值