SQLAlchemy 数据库操作完整指南:从模型定义到CRUD实战

SQLAlchemy 是 Python 中最著名的 ORM(对象关系映射)框架之一,它允许开发者使用 Python 类来定义数据库表,并通过简单的 Python 代码执行各种数据库操作。本文将带你全面了解 SQLAlchemy 的基本使用方法。

1. 环境准备与引擎创建

首先需要安装 SQLAlchemy,然后创建数据库引擎:

1
2
3
4
from sqlalchemy import create_engine

# 创建 SQLite 数据库引擎
engine = create_engine('sqlite:///user.db')

这里我们使用 SQLite 作为示例数据库,实际项目中可以根据需要替换为 MySQL、PostgreSQL 等。

2. 定义数据模型

使用声明式基类来定义数据模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class User(Base):
__tablename__ = 'users'

id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(20))
nikename = Column(String(32))
password = Column(String(32))
email = Column(String(50))

代码说明:

  • __tablename__ 指定映射的数据库表名
  • Column 定义表字段
  • primary_key=True 设置主键
  • autoincrement=True 设置自增

3. 创建数据表

1
2
# 执行业务逻辑表的创建
Base.metadata.create_all(engine, checkfirst=True)

checkfirst=True 参数确保不会重复创建已存在的表。

4. 数据库会话管理

1
2
3
4
5
6
from sqlalchemy.orm import sessionmaker

# 创建会话类
Session = sessionmaker(bind=engine)
# 实例化会话对象
session = Session()

会话(Session)是 SQLAlchemy 与数据库交互的主要接口。

5. 增删改查(CRUD)操作详解

5.1 新增记录

1
2
3
4
5
6
7
# 创建用户实例
_user = User(name='xiaozhong', nikename='Zyx',
password='123456', email='zyx@qq.com')

# 添加到会话并提交
session.add(_user)
session.commit()

5.2 查询记录

基本查询:

1
2
3
4
5
6
7
from typing import List

# 查询所有符合条件的记录
result: List[User] = session.query(User).filter_by(name='xiaozhong').all()

for item in result:
print(item.name, item.password, item.email)

指定字段查询:

1
2
3
4
5
6
# 只查询特定字段
result1: List[User] = session.query(User.name, User.email, User.password)\
.filter_by(name='xiaozhong').all()

for item in result1:
print(item.name, item.password, item.email)

模糊查询:

1
2
3
4
5
6
# 使用 like 进行模糊匹配
result2: List[User] = session.query(User)\
.filter(User.name.like("xiao%")).all()

for item in result2:
print(item.name, item.password, item.email)

正则表达式查询:

1
2
3
# 使用正则表达式匹配
result3: List[User] = session.query(User)\
.filter(User.name.op("regexp")("^xiao")).all()

5.3 更新记录

方法一:对象属性更新

1
2
3
4
5
6
# 查询并更新对象
update_user: User = session.query(User)\
.filter_by(name='xiaozhong').first()

update_user.email = 'zyx123@qq.com'
session.commit()

方法二:批量更新

1
2
3
4
# 直接批量更新
session.query(User).filter_by(name='xiaozhong')\
.update({User.email: 'zyx123456@qq.com'})
session.commit()

5.4 删除记录

方法一:对象删除

1
2
3
4
5
6
7
# 查询并删除对象
del_user: User = session.query(User)\
.filter_by(name='xiaozhong').first()

if del_user:
session.delete(del_user)
session.commit()

方法二:条件删除

1
2
3
4
5
6
7
8
# 直接条件删除
session.query(User).filter_by(name='xiaozhong').delete()
session.commit()

# 或者使用另一种语法
session.query(User).filter(User.name=='xiaozhong')\
.delete(synchronize_session=False)
session.commit()

6. 最佳实践与注意事项

  1. 会话管理:确保在操作完成后及时关闭会话
  2. 异常处理:在实际应用中要添加适当的异常处理
  3. 密码安全:示例中的明文密码存储仅用于演示,实际项目应使用哈希加密
  4. 事务管理:复杂的操作应该放在事务中确保数据一致性

7. 总结

SQLAlchemy 提供了强大而灵活的数据库操作能力,通过本文的示例,你可以看到:

  • 如何定义数据模型
  • 如何创建数据库表
  • 如何进行完整的 CRUD 操作
  • 多种查询和更新方式的使用

掌握这些基础操作后,你可以进一步学习 SQLAlchemy 的高级特性,如关系映射、复杂查询、连接池管理等,以构建更加健壮的数据库应用。


进一步学习建议:

  • 学习关系型数据建模(一对多、多对多关系)
  • 了解数据库索引优化
  • 掌握 SQLAlchemy 的异步支持
  • 学习数据库迁移工具(Alembic)

希望这篇指南能帮助你在项目中更加得心应手地使用 SQLAlchemy!