«

[SQLAlchemy学习笔记]什么场景用orm模型类,什么时候用Table类

qkabcd 发布于 阅读:327 IT技术


在 SQLAlchemy 中,ORM 模型类和 Table 类都可以用来定义数据库表结构,但它们适用于不同的场景和开发风格。以下是它们的适用场景、对比以及生活中的例子类比:

适用场景

ORM 模型类

  1. 面向对象开发:当项目需要以面向对象的方式进行开发,且业务逻辑复杂时,ORM 模型类可以提供更直观的抽象。
  2. 代码可读性和维护性:ORM 模型类使得代码更加直观和易于维护,特别是当团队成员熟悉面向对象编程时。
  3. 查询和操作数据:当需要频繁地查询和操作数据,而不是直接操作表结构时,ORM 模型类更加方便。

Table 类

  1. 直接操作数据库表结构:当需要直接操作数据库表结构,比如创建、修改、删除表,或者进行数据库迁移时,Table 类更加灵活。
  2. 动态表结构:当表结构是动态生成的,或者需要根据运行时的条件来定义表时,Table 类更适合。
  3. 性能优化:在一些性能要求较高的场景中,直接使用 Table 类可以减少 ORM 层的开销。

对比

特点 ORM 模型类 Table 类
抽象层次 提供面向对象的抽象,操作数据 更接近数据库,操作表结构
灵活性 中,适合固定业务逻辑 高,适合动态变化
性能 稍低,但提供更方便的操作 较高,减少 ORM 层开销
学习曲线 较高,需要理解 ORM 概念 较低,直接操作数据库
适用场景 面向对象开发、复杂业务逻辑、查询和操作数据 数据库表结构操作、动态表、性能优化

生活中的例子类比

ORM 模型类

假设你要管理一个学校的学籍系统,其中有一个表用于存储学生的基本信息。使用 ORM 模型类就像定义一个学生类,每个学生对象都有姓名、年龄、性别等属性。你可以通过创建、更新、删除学生对象来管理学生信息,这种方式直观且易于理解。

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Student(Base):
    __tablename__ = 'students'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    age = Column(Integer)
    sex = Column(String(10))

# 创建学生对象
student = Student(name='张三', age=18, sex='男')

# 更新学生信息
student.age = 19

# 删除学生对象
del student

Table 类

假设你要设计一个学校的数据库系统,需要先定义数据库的表结构。使用 Table 类就像设计一张表格,表格中有学号、姓名、年龄、性别等列。你可以通过定义表格的列和约束来创建表结构,这种方式更接近数据库的设计。

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String

engine = create_engine('mysql+pymysql://root:root@localhost/myorm1', echo=True)
metadata = MetaData()

students_table = Table(
    'students', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(50)),
    Column('age', Integer),
    Column('sex', String(10))
)

# 创建表
metadata.create_all(engine)

总结

通过理解两者的特性和适用场景,你可以根据项目的具体需求选择最合适的方式。

orm