19.Python数据库操作:从基础连接到实战应用

116 阅读3分钟

@[toc] 更多技术干货欢迎关注微信公众号“科威舟的AI笔记”~

Python数据库操作:从基础连接到实战应用

本文针对初中级Python开发者,系统讲解数据库连接、操作与事务管理,最后通过完整项目实战强化技能。


一、数据库连接:SQLite与MySQL的桥梁

1. 原生库连接(轻量级场景)

原理:Python通过DB-API规范提供统一数据库接口,不同数据库需安装对应驱动:

  • SQLite:Python内置sqlite3,数据存储在单文件中
  • MySQL:需安装PyMySQLmysql-connector

实战代码

# SQLite连接
import sqlite3
conn_sqlite = sqlite3.connect('library.db')  # 自动创建数据库文件

# MySQL连接(需先安装PyMySQL)
import pymysql
conn_mysql = pymysql.connect(
    host='localhost',
    user='root',
    password='yourpassword',
    database='library',
    charset='utf8mb4'
)

2. ORM连接(企业级应用)

原理:ORM(对象关系映射)将数据库表转为Python类,SQL操作转为方法调用。SQLAlchemy是Python最流行的ORM框架。

实战代码

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker

# 定义基类和模型
Base = declarative_base()

class Book(Base):
    __tablename__ = 'books'
    id = Column(Integer, primary_key=True)
    title = Column(String(100), nullable=False)
    author = Column(String(50))
    isbn = Column(String(13))

# 创建引擎和会话(支持SQLite/MySQL)
engine = create_engine('sqlite:///library.db') 
# 或 MySQL:mysql+pymysql://user:password@localhost/library
Session = sessionmaker(bind=engine)
session = Session()

二、CRUD与事务管理:数据操作核心 ⭐️

1. CRUD操作四要素

操作SQL命令ORM方法原生游标方法
创建INSERTsession.add()cursor.execute()
读取SELECTsession.query()cursor.fetchall()
更新UPDATEsession.commit()cursor.execute()
删除DELETEsession.delete()cursor.execute()

参数化查询防注入(关键安全实践):

# 错误方式(有注入风险)
cursor.execute(f"SELECT * FROM users WHERE name='{username}'")

# 正确方式(使用占位符)
cursor.execute("SELECT * FROM users WHERE name=%s", (username,))  # MySQL
cursor.execute("SELECT * FROM users WHERE name=?", (username,))   # SQLite

2. 事务管理原理

事务的ACID特性(原子性、一致性、隔离性、持久性)通过以下实现:

  • BEGIN:开启事务
  • COMMIT:提交所有操作
  • ROLLBACK:回滚失败操作

实战示例

try:
    # 转账操作(典型事务场景)
    cursor.execute("UPDATE accounts SET balance=balance-100 WHERE id=1")
    cursor.execute("UPDATE accounts SET balance=balance+100 WHERE id=2")
    conn.commit()  # 提交事务
except Exception as e:
    conn.rollback()  # 任何一步失败则回滚
    print("事务失败:", e)

三、实战:图书管理系统(数据库版)

1. 数据库设计

创建books表结构:

CREATE TABLE books (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title TEXT NOT NULL,
    author TEXT,
    isbn TEXT UNIQUE,
    status TEXT DEFAULT 'AVAILABLE'  -- 状态:AVAILABLE/BORROWED
);

2. 核心类实现(使用SQLAlchemy ORM)

class BookManager:
    def __init__(self):
        self.engine = create_engine('sqlite:///library.db')
        Base.metadata.create_all(self.engine)
        self.Session = sessionmaker(bind=self.engine)
    
    def add_book(self, title, author, isbn):
        session = self.Session()
        try:
            book = Book(title=title, author=author, isbn=isbn)
            session.add(book)
            session.commit()
            print(f"添加成功:{title}")
        except Exception as e:
            session.rollback()
            print("添加失败:", e)
        finally:
            session.close()
    
    def borrow_book(self, book_id):
        session = self.Session()
        try:
            book = session.query(Book).get(book_id)
            if book and book.status == 'AVAILABLE':
                book.status = 'BORROWED'
                session.commit()
                return True
            return False
        finally:
            session.close()

    # 补充:查询/归还/删除方法(完整代码见文末GitHub链接)

3. 功能测试

manager = BookManager()
manager.add_book("Python编程:从入门到实践", "Eric Matthes", "9787115428028")

# 借阅ID为1的书籍
if manager.borrow_book(1):
    print("借阅成功!")
else:
    print("书籍不可借")

4. 事务应用场景

批量导入书籍时保持原子性:

def import_books(book_list):
    session = Session()
    try:
        for book_data in book_list:
            session.add(Book(**book_data))
        session.commit()  # 全部成功才提交
    except:
        session.rollback()  # 任一失败则回滚
        print("批量导入失败,已回滚")

四、性能优化与安全建议

  1. 连接池技术:高并发场景使用SQLAlchemyQueuePool
    engine = create_engine('sqlite:///library.db', poolclass=QueuePool, pool_size=5)
    
  2. 索引优化:为常查询字段(如isbn)添加索引加速检索
  3. 环境变量管理:敏感信息(数据库密码)从环境变量读取
    import os
    password = os.getenv('DB_PASSWORD')
    


下期预告:Python的Web开发基础

  1. Flask vs Django框架对比
  2. 路由与视图函数设计
  3. 模板引擎与表单处理
  4. RESTful API开发实战

通过本文,你已掌握数据库操作的核心技能。关键要点:ORM提升开发效率、事务保证数据安全、参数化查询防注入。在实际项目中灵活运用这些技术,将大幅提升代码质量与系统可靠性。