SQLAlchemy ORM模型:字段类型、约束与数据操作详解

SQLAlchemy作为Python生态中最强大的ORM工具之一,为开发者提供了高效便捷的数据库操作方式。本文将详细介绍SQLAlchemy ORM模型中的字段类型、字段约束以及基础数据操作,助您快速掌握核心用法。


一、字段类型详解

SQLAlchemy提供了丰富的字段类型,下表展示了常用类型及其对应的Python数据类型:

ORM字段类型 Python类型 描述
Integer int 32位普通整数
SmallInteger int 16位小整数
BigInteger int 不限制精度的大整数(替代Integer)
Float float 浮点数
Numeric decimal.Decimal 高精度定点数
String str 变长字符串(需指定长度,如String(20)
Text str 不限长度的文本类型
Boolean bool 布尔值(True/False)
DateTime datetime.datetime 日期时间类型
Date datetime.date 日期类型
Time datetime.time 时间类型
Enum enum.Enum 枚举类型(需配合Enum类使用)

关键类型说明:

String vs TextString必须指定最大长度,适用于短文本;Text适用于长文本内容。
数值类型选择:根据数据范围选择SmallInteger(-32768~32767)、IntegerBigInteger
时间类型DateTime精确到秒级,如需更高精度可使用DateTime(timezone=True)


二、字段约束配置

通过字段约束可定义数据校验规则,常用选项如下:

约束选项 说明
primary_key=True 设置为主键
unique=True 唯一约束(列值不可重复)
index=True 创建索引(提升查询效率)
nullable=False 非空约束(默认允许NULL)
default=值 默认值(支持函数如datetime.now

示例模型定义

from datetime import datetime
from sqlalchemy import Column, Integer, String, Text, Boolean, DateTime

class Student(db.Model):
    __tablename__ = 'tb_student'
    
    id = Column(Integer, primary_key=True)
    name = Column(String(20), nullable=False)
    sex = Column(Boolean, default=True)
    classes = Column('class', SmallInteger)  # 数据库字段名为class
    description = Column(Text)
    addtime = Column(DateTime, default=datetime.now)

三、数据操作指南

1. 添加数据

添加单条数据

student = Student(
    name="小明",
    classes=305,
    sex=True,
    age=18,
    description="新生入学"
)
db.session.add(student)  # 添加至会话
db.session.commit()      # 提交事务

批量添加数据

students = [
    Student(name="张三", classes=302),
    Student(name="李四", classes=303),
    Student(name="王五", classes=304)
]
db.session.add_all(students)
db.session.commit()

2. 查询数据

查询单条记录

# 通过主键查询
student = db.session.query(Student).get(1)
print(student.name)  # 输出:小明

# 使用first获取第一条记录
student = db.session.query(Student).filter_by(classes=305).first()

查询多条记录

# 查询所有学生
students = db.session.query(Student).all()
for stu in students:
    print(f"{stu.id}: {stu.name} - {stu.classes}班")

# 条件查询(后续文章详解)
result = db.session.query(Student).filter(Student.age > 16).all()

3. 更新与删除

(注:示例代码需在后续补充)


四、最佳实践与注意事项

  1. 会话管理:确保在操作后调用commit()提交事务,异常时使用rollback()回滚。
  2. 模型设计:合理选择字段类型,如手机号建议使用String(11)而非Integer
  3. 索引优化:对高频查询字段添加index=True提升性能。
  4. 时间字段:使用default=datetime.now自动记录创建时间。

参考资源

SQLAlchemy官方文档
Flask-SQLAlchemy扩展指南

通过掌握这些核心概念,您已经能够使用SQLAlchemy进行基础的数据库操作。接下来可深入学习关系映射、复杂查询和性能优化等高级主题。

posted @ 2025-03-26 15:20  千陌666  阅读(79)  评论(0)    收藏  举报