SQLAlchemy 数据库操作完整指南:从模型定义到CRUD实战
SQLAlchemy 是 Python 中最著名的 ORM(对象关系映射)框架之一,它允许开发者使用 Python 类来定义数据库表,并通过简单的 Python 代码执行各种数据库操作。本文将带你全面了解 SQLAlchemy 的基本使用方法。
1. 环境准备与引擎创建
首先需要安装 SQLAlchemy,然后创建数据库引擎:
1 2 3 4
| from sqlalchemy import create_engine
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
| 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. 最佳实践与注意事项
- 会话管理:确保在操作完成后及时关闭会话
- 异常处理:在实际应用中要添加适当的异常处理
- 密码安全:示例中的明文密码存储仅用于演示,实际项目应使用哈希加密
- 事务管理:复杂的操作应该放在事务中确保数据一致性
7. 总结
SQLAlchemy 提供了强大而灵活的数据库操作能力,通过本文的示例,你可以看到:
- 如何定义数据模型
- 如何创建数据库表
- 如何进行完整的 CRUD 操作
- 多种查询和更新方式的使用
掌握这些基础操作后,你可以进一步学习 SQLAlchemy 的高级特性,如关系映射、复杂查询、连接池管理等,以构建更加健壮的数据库应用。
进一步学习建议:
- 学习关系型数据建模(一对多、多对多关系)
- 了解数据库索引优化
- 掌握 SQLAlchemy 的异步支持
- 学习数据库迁移工具(Alembic)
希望这篇指南能帮助你在项目中更加得心应手地使用 SQLAlchemy!