Python 是一种广泛使用的编程语言,其在数据库操作方面的能力尤为强大,通过使用 Python 的数据库接口和 SQL 语句,开发者可以轻松地与各种数据库进行交互,实现数据的增删改查(CRUD)操作,本文将详细介绍如何在 Python 中编写和使用数据库语句,包括连接数据库、执行查询、处理结果以及事务管理等核心内容。

连接数据库
在 Python 中操作数据库的第一步是建立与数据库的连接,不同的数据库系统(如 MySQL、PostgreSQL、SQLite 等)通常有各自的 Python 驱动程序。mysql-connector-python 用于 MySQL,psycopg2 用于 PostgreSQL,而 Python 标准库中已经包含了 sqlite3 模块,无需额外安装,以 SQLite 为例,连接数据库的代码如下:
import sqlite3
# 连接到 SQLite 数据库(如果不存在则创建)
conn = sqlite3.connect('example.db')
cursor = conn.cursor() 连接成功后,可以通过 cursor 对象执行 SQL 语句,需要注意的是,连接数据库时应处理可能的异常,例如数据库不存在或权限不足等问题。
执行 SQL 语句
连接数据库后,可以通过 cursor.execute() 方法执行 SQL 语句,SQL 语句可以是创建表、插入数据、查询数据等操作,创建一个简单的用户表:
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER
)
''') 执行插入数据时,可以使用参数化查询来防止 SQL 注入攻击。
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 25)) 查询和处理结果
查询数据时,通常使用 SELECT 语句,执行查询后,可以通过 cursor.fetchall()、cursor.fetchone() 或 cursor.fetchmany() 方法获取结果。

cursor.execute("SELECT * FROM users WHERE age > ?", (20,))
results = cursor.fetchall()
for row in results:
print(row) fetchall() 返回所有结果行,fetchone() 返回单行,而 fetchmany(size) 返回指定数量的行,查询结果通常以元组或列表的形式返回,可以通过列名或索引访问具体数据。
事务管理
事务是数据库操作的重要概念,确保一组操作要么全部成功,要么全部失败,在 Python 中,默认情况下,每个 SQL 语句都是一个独立的事务,可以使用 commit() 和 rollback() 方法手动控制事务。
try:
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Bob', 30))
conn.commit() # 提交事务
except Exception as e:
conn.rollback() # 回滚事务
print(f"Error: {e}") 在事务中,如果某个操作失败,调用 rollback() 可以撤销所有未提交的更改,保证数据一致性。
使用 ORM 简化操作
除了直接编写 SQL 语句,还可以使用对象关系映射(ORM)工具如 SQLAlchemy 或 Django ORM,ORM 将数据库表映射为 Python 对象,使开发者可以使用面向对象的方式操作数据库,使用 SQLAlchemy 定义模型:
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)
name = Column(String)
age = Column(Integer)
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
# 添加用户
new_user = User(name='Charlie', age=35)
session.add(new_user)
session.commit() ORM 简化了数据库操作,减少了手动编写 SQL 语句的工作量,但可能牺牲一定的性能灵活性。

关闭连接
操作完成后,应及时关闭数据库连接和游标,以释放资源:
cursor.close() conn.close()
相关问答 FAQs
Q1: 如何防止 SQL 注入攻击?
A1: 使用参数化查询(也称为预处理语句)是防止 SQL 注入的最佳方式,在 Python 中,可以通过 cursor.execute() 的参数化查询功能实现,cursor.execute("SELECT * FROM users WHERE name = ?", (username,)),避免直接拼接 SQL 字符串,因为恶意用户可以通过输入特殊字符破坏 SQL 语句结构。
Q2: ORM 和原生 SQL 语句如何选择?
A2: 选择 ORM 还是原生 SQL 取决于项目需求,ORM 适合快速开发和维护,特别是对于中小型项目,能够提高代码可读性和减少重复工作,而原生 SQL 在性能要求高或需要复杂查询时更具优势,可以直接优化 SQL 语句,在实际开发中,可以结合两者使用,例如在关键性能路径上使用原生 SQL,其他部分使用 ORM。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复