Python Web 开发:数据库操作全攻略

在 Python Web 开发中,数据库操作必不可少。本文将全面介绍如何使用 Python 进行数据库操作,涵盖主流数据库连接、数据增删改查等,助你掌握关键技能。

468 × 60 文章顶部广告 QEG44JER

引言 / 什么是 Python Web 开发中的数据库操作

在 Python Web 开发中,数据库是存储和管理数据的核心组件。无论是用户信息、订单数据还是配置参数,几乎所有业务逻辑都依赖数据库的支持。Python 通过丰富的库(如 pymysql、SQLAlchemy、psycopg2)提供了与多种数据库(MySQL、PostgreSQL、SQLite)的交互能力。

本文将聚焦 MySQL 数据库,通过一个完整的用户信息管理系统案例,详细讲解如何使用 Python 实现数据库的连接、数据增删改查(CRUD)操作,帮助你快速掌握后端开发中的数据管理技能。

准备工作

  1. 环境要求:

    • Python 3.6+
    • MySQL 8.0+(或本地安装的 MySQL 服务)
    • 推荐使用虚拟环境:python -m venv venv && source venv/bin/activate
  2. 安装依赖库:

    pip install pymysql sqlalchemy
    
    • pymysql:纯 Python 实现的 MySQL 客户端库。
    • SQLAlchemy:功能强大的 ORM 工具,支持多种数据库。
  3. 创建测试数据库:

    CREATE DATABASE IF NOT EXISTS user_management CHARACTER SET utf8mb4;
    USE user_management;
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL UNIQUE,
        email VARCHAR(100) NOT NULL UNIQUE,
        age INT DEFAULT 18
    );
    

基础操作 / 核心用法

步骤一:连接 MySQL 数据库

使用 pymysql 直接连接数据库:

import pymysql

# 连接配置
connection = pymysql.connect(
    host='localhost',
    user='root',
    password='your_password',
    database='user_management',
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor  # 返回字典格式结果
)

try:
    with connection.cursor() as cursor:
        # 测试连接
        cursor.execute("SELECT VERSION()")
        version = cursor.fetchone()
        print(f"数据库版本: {version['VERSION()']}")
finally:
    connection.close()

提示:生产环境中建议将数据库配置存储在环境变量或配置文件中,避免硬编码。

步骤二:实现数据增删改查(CRUD)

1. 创建数据(Create)

def add_user(username, email, age=18):
    connection = pymysql.connect(**DB_CONFIG)
    try:
        with connection.cursor() as cursor:
            sql = "INSERT INTO users (username, email, age) VALUES (%s, %s, %s)"
            cursor.execute(sql, (username, email, age))
        connection.commit()  # 提交事务
        print("用户添加成功!")
    except Exception as e:
        connection.rollback()  # 回滚事务
        print(f"添加失败: {e}")
    finally:
        connection.close()

# 示例调用
add_user("alice", "alice@example.com", 25)

2. 查询数据(Read)

def get_users():
    connection = pymysql.connect(**DB_CONFIG)
    try:
        with connection.cursor() as cursor:
            cursor.execute("SELECT * FROM users")
            users = cursor.fetchall()  # 获取所有结果
            for user in users:
                print(f"ID: {user['id']}, 用户名: {user['username']}")
    finally:
        connection.close()

# 条件查询
def get_user_by_id(user_id):
    connection = pymysql.connect(**DB_CONFIG)
    try:
        with connection.cursor() as cursor:
            cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
            user = cursor.fetchone()  # 获取单条结果
            return user
    finally:
        connection.close()

3. 更新数据(Update)

def update_user_age(user_id, new_age):
    connection = pymysql.connect(**DB_CONFIG)
    try:
        with connection.cursor() as cursor:
            sql = "UPDATE users SET age = %s WHERE id = %s"
            cursor.execute(sql, (new_age, user_id))
        connection.commit()
        print("用户年龄更新成功!")
    except Exception as e:
        connection.rollback()
        print(f"更新失败: {e}")
    finally:
        connection.close()

4. 删除数据(Delete)

def delete_user(user_id):
    connection = pymysql.connect(**DB_CONFIG)
    try:
        with connection.cursor() as cursor:
            cursor.execute("DELETE FROM users WHERE id = %s", (user_id,))
        connection.commit()
        print("用户删除成功!")
    except Exception as e:
        connection.rollback()
        print(f"删除失败: {e}")
    finally:
        connection.close()

进阶技巧

使用 SQLAlchemy 实现 ORM 操作

SQLAlchemy 是 Python 中最流行的 ORM 工具,能通过类映射数据库表,简化操作:

  1. 定义模型类:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    username = Column(String(50), unique=True)
    email = Column(String(100), unique=True)
    age = Column(Integer, default=18)

# 创建引擎和会话
engine = create_engine('mysql+pymysql://root:your_password@localhost/user_management')
Session = sessionmaker(bind=engine)
session = Session()
  1. CRUD 操作:
# 添加用户
new_user = User(username="bob", email="bob@example.com", age=30)
session.add(new_user)
session.commit()

# 查询用户
users = session.query(User).filter_by(age=30).all()
for user in users:
    print(user.username)

# 更新用户
user = session.query(User).get(1)
user.age = 26
session.commit()

# 删除用户
user = session.query(User).get(2)
session.delete(user)
session.commit()

事务管理与连接池

特性 说明
事务 通过 connection.begin() 开启事务,确保数据一致性
连接池 SQLAlchemy 默认启用连接池,避免频繁创建/销毁连接,提升性能
自动提交 关闭自动提交(autocommit=False),手动控制事务提交或回滚

常见问题

Q:如何处理数据库连接失败?
A:使用 try-except 捕获 pymysql.Error 或 sqlalchemy.exc.OperationalError,记录错误日志并重试连接。

Q:如何防止 SQL 注入攻击?
A:始终使用参数化查询(如 %s 占位符),避免直接拼接 SQL 字符串。

Q:ORM 和原生 SQL 如何选择?
A:简单查询推荐 ORM(代码更简洁);复杂查询或性能优化时使用原生 SQL。

小结

本文通过 MySQL 数据库 和 Python 的结合,详细讲解了:

  1. 数据库连接配置与基础 CRUD 操作;
  2. 使用 SQLAlchemy 实现 ORM 映射;
  3. 事务管理与安全实践。

完整代码示例可在 GitHub 获取。建议从原生 SQL 开始练习,再逐步过渡到 ORM,以深入理解数据库操作原理。动手实现一个用户管理系统,是掌握 Python Web 开发数据库操作的最佳实践!

468 × 60 文章底部广告 7XM2LNHL

💡 推荐阅读

Python Web 开发:性能优化技巧大揭秘

Python Web 应用性能不佳怎么办?本文将揭秘一系列性能优化技巧,从代码层面到服务器配置,全方位提升你的 Python Web 应用性能,让用户体验更流畅。

Python Web 开发:RESTful API 设计与实现

RESTful API 是现代 Web 开发的重要部分。本文深入讲解 Python Web 开发中 RESTful API 的设计原则和实现方法,让你构建出高效、规范的 API 接口。

Python Web 开发:安全防护指南

在 Python Web 开发中,安全至关重要。本文为你提供全面的安全防护指南,涵盖常见安全漏洞及防范措施,让你的 Python Web 应用远离安全威胁。

剪映模板素材哪里找?优质资源推荐

想要找到优质的剪映模板素材?本文为你推荐几个可靠的资源网站,让你轻松获取丰富多样的模板素材,提升视频制作水平。

手机进水后如何紧急处理?5步自救指南

手机意外落水别慌!掌握这5个紧急处理步骤,能大幅降低手机损坏风险,甚至可能让手机恢复如初。快来学习正确的自救方法吧!

Android通知历史记录:轻松回顾错过的消息

错过重要消息?Android通知历史记录来帮你!本文教你如何查看和管理通知历史记录,不再错过任何重要信息。

手机摄影专业模式全解析:轻松拍出大片感

手机摄影专业模式功能强大,但很多人不知如何使用。本文将详细介绍专业模式各项参数,从基础到进阶,让你快速上手,轻松拍出具有大片感的照片,提升摄影水平。

Excel数据透视表实战案例:销售数据分析

想要通过Excel数据透视表进行销售数据分析?本文将通过一个实战案例,教你如何运用数据透视表进行销售趋势分析、客户分类和产品分析等!

手机充电显示异常?解读与修复指南

手机充电时显示异常?本文解读常见显示问题,如不显示充电、电量跳变等,并提供修复方法,让你的手机充电显示恢复正常。

电脑开机无反应?5步排查法轻松解决

电脑按下电源键却毫无反应?别慌!本文教你5步排查法,从电源、主板到内存,逐步定位问题根源,轻松解决开机无反应的难题。

剪映转场效果:如何让视频过渡更自然?

剪映转场效果大揭秘!本文将教你如何为视频添加转场效果,并调整转场的时长、方向等参数,让你的视频过渡更加自然流畅。

WPS演示图表制作技巧:数据可视化轻松搞定

数据太多难以呈现?本文将教你如何使用WPS演示制作图表,将复杂数据转化为直观图表,让观众一眼看懂数据背后的故事,提升演示说服力。

iOS系统设置:如何快速关闭后台应用刷新?

后台应用刷新会悄悄消耗电量和流量,其实iOS系统设置里就能轻松关闭。本文将教你一步步操作,还能了解关闭后的影响,让你的iPhone更省电!

批量打印入门:如何快速设置打印任务?

批量打印能大幅提升效率,但设置起来却让不少人头疼。本文将带你从零开始,学习如何快速设置打印任务,掌握基础技巧,让打印变得轻松又高效。

手机夜景拍摄全攻略:轻松拍出璀璨夜色

夜景拍摄是手机摄影的难点,但掌握技巧后也能拍出惊艳作品。本文将分享手机夜景拍摄的参数设置、构图技巧及实用小工具,助你轻松捕捉城市夜晚的璀璨与静谧。

OBS 录屏音频设置全攻略:清晰收录每一声

录屏时音频杂音大或声音小?本文为你提供 OBS 录屏音频设置全攻略,教你如何正确设置音频设备,清晰收录系统声音和麦克风声音,提升录屏音频质量。

Excel动态图表制作指南:用控件实现数据联动

通过表单控件与动态公式结合,教你创建可交互的销售分析仪表盘,让数据随选择自动更新变化。

剪映贴纸高级技巧:自定义贴纸与动画效果

想要让贴纸更加个性化?剪映的自定义贴纸与动画效果功能来帮你!本文教你如何制作并应用自定义贴纸,以及添加动画效果。

Excel VLOOKUP函数完全指南

VLOOKUP是Excel中最常用的查找函数。本教程详细讲解VLOOKUP的语法、使用方法、常见错误及进阶技巧,配合实例帮助你彻底掌握。

机箱风道设计:优化散热,提升电脑性能

合理的机箱风道设计能显著提升电脑散热效果。本文将教你如何优化机箱风道,让电脑硬件在更佳的环境下运行,提升整体性能。