在日常的数据处理和开发中,我们经常需要从数据库中查询数据。Python 提供了多种方式来完成这项任务,其中最常见的就是:
那么问题来了:这两种方式到底有什么区别?各自适合什么场景?今天我们就来聊聊这个话题。
🔍 SQLAlchemy 查询方式
SQLAlchemy 是一个功能强大的 ORM 框架,它允许我们用 Python 类和对象来操作数据库,避免直接写 SQL。
✅ 适合场景:
- 查询单个值(如计数、最大值):
count = session.query(func.count(User.id)).scalar()
- 查询单条记录:
user = session.query(User).filter(User.id == 1).first()
✍️ 数据写入示例
from datetime import datetimefrom sqlalchemy.orm import Sessionnew_record = CheckMainInfo( 名称='设备A', 开始时间=datetime.now().replace(microsecond=0), 姓名='张三', 结果='正常')with Session() as session: session.add(new_record) session.commit()
🔄 数据更新示例
with Session() as session: record = session.query(CheckMainInfo).filter(CheckMainInfo.id == 1).first()if record: record.结果 = '异常' record.姓名 = '李四' session.commit()
🗑️ 数据删除示例(SQLAlchemy 更加合适)
SQLAlchemy 的事务机制让删除操作更安全、可控:
with Session() as session: record = session.query(CheckMainInfo).filter(CheckMainInfo.id == 1).first()if record: session.delete(record) session.commit()
你也可以批量删除:
session.query(CheckMainInfo).filter(CheckMainInfo.结果 == '异常').delete()session.commit()
📊 Pandas 查询方式
Pandas 是数据分析的神器,它可以通过 read_sql() 直接从数据库中读取数据并转换为 DataFrame,非常适合做数据处理和分析。
✅ 适合场景:
import pandas as pddf = pd.read_sql("SELECT * FROM check_main_info", engine)print(df[df['结果'] == '异常'].sort_values('开始时间'))
📥 批量写入数据(Pandas 更加方便)
当你需要一次性写入大量数据时,Pandas 的 to_sql() 方法非常高效:
df = pd.DataFrame([ {'名称': '机器A', '开始时间': '2025-09-19 10:00:00', '姓名': '张三', '结果': '正常'}, {'名称': '机器B', '开始时间': '2025-09-19 10:05:00', '姓名': '李四', '结果': '异常'},])df.to_sql('check_main_info', con=engine, if_exists='append', index=False)
适合从 Excel、CSV 或其他系统导入数据时使用。
⚖️ 对比总结